SQL Script конвертируется в MySQL - PullRequest
1 голос
/ 10 марта 2012

Я пытаюсь решить эту проблему истории миграции, но не могу заставить ее работать в MySQL

SELECT *
INTO [TempMigrationHistory]
FROM [__MigrationHistory]

DROP TABLE [__MigrationHistory]

EXEC sp_rename 'TempMigrationHistory', '__MigrationHistory'

Как мне заставить это работать в mySQL?

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Близкий эквивалент mysql SQL для SQL Server, предоставляемый t-sql, выглядит примерно так, как здесь.(Очевидно, что field1, field2 являются заполнителями.)

CREATE TABLE `TempMigrationHistory` LIKE `__MigrationHistory`;

INSERT INTO `TempMigrationHistory` (field1, field2)
SELECT field1, field2
FROM `__MigrationHistory`;

DROP TABLE `__MigrationHistory`;

RENAME TABLE `TempMigrationHistory` to `__MigrationHistory`;

Указывает на примечание ...

  • mysql не поддерживает SELECT INTO , но имеет CREATE TABLE LIKE утверждение, что SQL Server этого не делает.
  • Backticks (`) используются по соглашению в mysql вместо квадратных скобок ([) в t-sql.
  • mysql часто имеет специальные системные команды, которые заменяют системные хранимые процедуры SQL Server.функциональность (например, sp_rename с RENAME TABLE в этом случае).

В конце этой последовательности операций кажется, что у вас есть именно то, с чего вы начали, поэтому я немного озадачен желанием выполнить эту последовательность событий, но я полагаю, что это касаетсяваш вопрос.

0 голосов
/ 11 марта 2012

Не все РСУБД ведут себя одинаково.Рассматривали ли вы поиск синтаксиса MySQL для создания оператора INSERT?Например,

INSERT INTO TempMigrationHistory
            (Col1,
             Col2,
             Col3)
SELECT Col1,
       Col2,
       Col3
FROM   __MigrationHistory 

Кроме того, sp_rename является хранимой процедурой SQL Server.Эквивалентом в MySQL является RENAME.В вашем случае это, вероятно, будет работать:

RENAME TABLE TempMigrationHistory TO __MigrationHistory;
...