2012-03-10 98 views
1

我試圖解決這一問題的遷移歷史問題,但不能得到這個在MySQLSQL腳本轉換到MySQL

SELECT * 
INTO [TempMigrationHistory] 
FROM [__MigrationHistory] 

DROP TABLE [__MigrationHistory] 

EXEC sp_rename 'TempMigrationHistory', '__MigrationHistory' 

工作,我將如何獲得MySQL的這個工作?

回答

0

SQL Server提供的關閉等效的SQL SQL 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`; 

注意事項...

在這個操作序列的末尾,看起來你確切地開始了,所以我對執行這個事件序列的慾望有些困惑,但我想這是你的問題的一個切線。

+0

我認爲在MySQL中還有'CREATE TABLE t AS SELECT ...',它比'CREATE TABLE LIKE' +'INSERT ... SELECT'更接近於T-SQL的'SELECT INTO'。 – 2012-03-11 15:09:40

+0

@Adriy:關於'CREATE TABLE ... SELECT'的好處。這將是另一種選擇。 – Tahbaza 2012-03-11 22:21:28

0

並非所有的RDBMS都表現相同。你是否考慮過尋找用於創建INSERT語句的MySQL語法?例如,

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

另外,sp_rename是一個SQL Server存儲過程。 MySQL中的等價物是RENAME。在你的情況下,這可能會工作:

RENAME TABLE TempMigrationHistory TO __MigrationHistory; 
+0

感謝問題是tempmigrationhistory表不存在 - 所以我認爲它需要創建一個內存表,然後移動它?問題是使用EF 4.3 - 創建一個我不需要成爲系統表的系統表? – Andy 2012-03-11 04:11:12

+0

我認爲你需要編輯你的問題來解決你遇到的具體問題。正如所寫,您的問題似乎要問如何插入記錄並重命名錶。系統表問題出自左側字段。 – gangreen 2012-03-11 04:53:14