2010-07-21 268 views
0

我有一個爲MySQL 5生成的模型,但現在我需要在SQL Server安裝上創建這些表。將MySQL DDL轉換爲SQL Server DDL

它已經因爲我用SQL服務器,我想確保我可以將此腳本轉換爲兼容。

我真的不知道要尋找什麼TBQH,所以事不宜遲,這裏是我的MySQL DDL的入門

CREATE 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; 

回答

2

一種方法是你的DDL加載到MySQL數據庫,然後用mysqldump --compatible=mssql重新轉儲它。這應該讓你開始 - 並從那裏開始,可能會通過T-SQL文檔並在此基礎上逐一詢問。此外,Microsoft還有一些資源,如this article(對於SQL Server 2000,但它可以幫助正確映射數據類型)。

+0

我試圖在我自己的轉換中使用mysqldump,它並沒有真正的幫助。我認爲它可能會翻譯一些數據類型,但它沒有。另外,它以錯誤的順序轉儲表,不允許定義外鍵。 (但是,它成功地註釋掉了所有的MySQL SET命令:-) YMMV。我有原始的MySQL DDL腳本,在我的案例中,我發現它更容易手動轉換,在SQL Server Mgmt Studio的sql編輯器中打開腳本並解決突出顯示的問題。 – Bampfer 2017-08-09 23:15:54

+0

微軟文章很有用,謝謝。 – Bampfer 2017-08-09 23:18:07

2

彼得,

有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) 

請注意以下變化:

  • AUTO_INCREMENT被交換 身份。您可以指定起始值和增量
  • MSSQL可是沒有符號或無符號整數
  • 主鍵將作爲一個聚集索引默認
  • 的指標將作爲非唯一和非創造創造的概念除非指定,否則爲聚簇

columnname'text'是一個保留關鍵字,應該更改,以停止解析問題。

希望有所幫助。

0

另一種可能性(如果你有機會到MySQL數據庫本身,而不是在DDL)是使用遷移向導,微軟已經發布:

遷移到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的嚮導......它工作得很好。

-Brian