2010-07-21 3 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 editor и работая над проблемами, которые он выделил. – Bampfer

+0

Статья Microsoft была полезна, спасибо. – Bampfer

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 обменена для IDENTITY. Необходимо указать начальное значение и приращение
  • MSSQL оленьей кожи есть понятие знакового или беззнаковый Интс
  • Первичный ключ будет создан в качестве кластерного индекса по умолчанию
  • Индексы будут созданы как не уникальными и не сгруппированы, если не указано

Имя столбца «текст» является зарезервированным ключевым словом и также должно быть изменено, чтобы остановить любые проблемы синтаксического анализа.

Надеюсь, что это поможет.

0

Другая возможность (если у вас есть доступ к самой базе данных MySQL, в отличие от DDL) является использование мастера миграции, что Microsoft выпустила:

Для перехода на 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

Смежные вопросы