我有一个为MySQL 5生成的模型,但现在我需要在SQL Server安装上创建这些表。
自从使用SQL Server以来,已经有[[years年,我想确保可以转换此脚本以使其兼容。
我真的不知道该寻找TBQH,所以事不宜迟,这是我的MySQL DDLCREATE SCHEMA IF NOT EXISTS `bof_survey` DEFAULT CHARACTER SET utf8 COLLATE default collation ;
USE `bof_survey`;
-- -----------------------------------------------------
-- Table `bof_survey`.`question`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bof_survey`.`question` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`text` VARCHAR(255) NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `bof_survey`.`category`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bof_survey`.`category` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`adverb` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `bof_survey`.`answer`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bof_survey`.`answer` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`question_id` INT UNSIGNED NULL ,
`category_id` INT UNSIGNED NULL ,
`text` VARCHAR(60) NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_answer_question` (`question_id` ASC) ,
INDEX `fk_answer_category1` (`category_id` ASC) ,
CONSTRAINT `fk_answer_question`
FOREIGN KEY (`question_id` )
REFERENCES `bof_survey`.`question` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_answer_category1`
FOREIGN KEY (`category_id` )
REFERENCES `bof_survey`.`category` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
mysqldump --compatible=mssql
重新转储它。这应该可以帮助您入门-从那里开始,可能要遍历T-SQL文档,并逐案询问。此外,Microsoft还有一些资源,例如this article(用于SQL Server 2000,但它可以帮助正确映射数据类型)。
您需要在此处考虑MySQL和MSSQL之间的某些差异,尤其是架构。我不太确定它们如何与MySQL一起使用,但似乎几乎像MSSQL本身所称的数据库。
MSSQL中的模式更多是安全性抽象层,用于对数据库内的对象进行分组。 AFAIK并没有大量使用它,但是MS希望推广它。我在这里省略了它,然后在默认模式(通常是dbo)中创建对象。
不用说,其余的很简单:
-- -----------------------------------------------------
-- Table question
-- -----------------------------------------------------
IF NOT EXISTS ( SELECT *
FROM sys.objects
WHERE name = 'question' )
BEGIN
CREATE TABLE question
(id int IDENTITY(1, 1)
NOT NULL,
text varchar(255) NOT NULL,
PRIMARY KEY (id)) ;
END
-- -----------------------------------------------------
-- Table category
-- -----------------------------------------------------
IF NOT EXISTS ( SELECT *
FROM sys.objects
WHERE name = 'category' )
CREATE TABLE category
(id int IDENTITY(1, 1)
NOT NULL,
name varchar(45) NOT NULL,
adverb varchar(45) NOT NULL,
PRIMARY KEY (Id)) ;
-- -----------------------------------------------------
-- Table answer
-- -----------------------------------------------------
IF NOT EXISTS ( SELECT *
FROM sys.objects
WHERE name = 'answer' )
CREATE TABLE answer
(id int IDENTITY(1, 1)
NOT NULL,
question_id int NULL,
category_id int NULL,
text varchar(60) NULL PRIMARY KEY (Id),
CONSTRAINT fk_answer_question FOREIGN KEY (question_id) REFERENCES question (id) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT fk_answer_category1 FOREIGN KEY (category_id) REFERENCES category (id) ON DELETE NO ACTION ON UPDATE NO ACTION);
CREATE INDEX fk_answer_question ON answer(question_id ASC)
CREATE INDEX fk_answer_category1 ON answer(category_id ASC)
请注意以下更改:
希望有所帮助。
用于迁移到SQL Server 2008:http://www.microsoft.com/downloads/details.aspx?FamilyID=0e6168b0-2d0c-4076-96c2-60bd25294a8e&displaylang=en
用于迁移到SQL Server 2005:http://www.microsoft.com/downloads/details.aspx?FamilyID=c6f14640-da22-4604-aaaa-a45de4a0cd4a&displaylang=en
我已使用SQL Server 2008的向导...它运行良好。
-布莱恩
`my_column_name`
,但是当我从SQL Server导出时,列名用方括号[my_column_name]
括起来。 KEY
表示INDEX
。由于确实存在实际的PRIMARY KEY
和FOREIGN KEY
,因此我不得不手动检查脚本并进行替换。bigint(20)
的列。我将其更改为bigint
CHARACTER SET latin1
更改为COLLATE latin1
double
更改为float(53)
。UNIQUE KEY [NAME] ([NAME]),
之后删除了ALTER TABLE [my_table] ADD CONSTRAINT UNQ_NAME UNIQUE([NAME])
并创建了一条alter语句。