MS SQL Server不允许我将IDENTITY_INSERT设置为ON

时间:2017-06-21 14:36:34

标签: sql sql-server-2008 identity-insert

我在数据库(MS SQL Server 2008)中有一个填充了数据的表。我想将一些这些数据(其中一个带有IDENTITY约束的列)移动到另一个数据库中具有相同名称的表,以备用。由于我有一个我想要移动的IDENTITY列的表,我需要将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忽略了' ON'在我的字符串@IDENTITY_INSERTTableCommand中,当我在字符串中输入乱码时,它会抱怨synthax错误。

谁能告诉我我做错了什么?提前谢谢。

1 个答案:

答案 0 :(得分: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)