2012-03-10 102 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