2017-06-21 36 views
0

我在数据库(MS SQL Server 2008)中有一个填充了数据的表。我想将其中一些数据(其中是带有IDENTITY约束的列)移动到另一个数据库中具有相同名称的表中以备用。由于我有一个我想移动的IDENTITY列的表,我需要将IDENTITY_INSERT设置为ON。我不想对此进行硬编码,因为在将来可能会出现其他表格和列。MS SQL Server不允许我将IDENTITY_INSERT设置为ON

我一直在摆弄着这片代码小时,无法得到它的工作:

SET IDENTITY_INSERT FDW_test2.dbo.[MIS-ODB_INOUT_LOG] OFF 

declare @IDENTITY_INSERTTableCommand nchar(150) = 'SET IDENTITY_INSERT 
FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ON' 

execute (@IDENTITY_INSERTTableCommand) 

INSERT INTO FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ([INOUT_Link ID], 
[INOUT_DIARY_KEY]) 
    SELECT [INOUT_Link ID], [INOUT_DIARY_KEY] 
    FROM FDW.dbo.[MIS-ODB_INOUT_LOG] 
    WHERE [INOUT_Client ID] = '1-197' 

运行此脚本时,我收到以下错误:在表中标识列的显式值只能在使用列列表并且IDENTITY_INSERT为ON时指定SQL Server。

似乎MS SQL忽略了我的字符串@IDENTITY_INSERTTableCommand中的'ON',但是当我向字符串中输入乱码时,它会抱怨合成器错误。

谁能告诉我我做错了什么?先谢谢你。

回答

0

一旦execute它完成IDENTITY_INSERT将回到OFF。这将是ON只是里面的execute

移动Insert语句串并执行

declare @IDENTITY_INSERTTableCommand nvarchar(2000) = 
'SET IDENTITY_INSERT FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ON 

INSERT INTO FDW_test2.dbo.[MIS-ODB_INOUT_LOG] ([INOUT_Link ID], 
[INOUT_DIARY_KEY]) 
    SELECT [INOUT_Link ID], [INOUT_DIARY_KEY] 
    FROM FDW.dbo.[MIS-ODB_INOUT_LOG] 
    WHERE [INOUT_Client ID] = ''1-197'' 
' 

execute (@IDENTITY_INSERTTableCommand) 
+0

太感谢你了!这工作。 :D我很高兴我没有花费我的下午。 – Vraagteken

相关问题