MS SQL Server不允许我将IDENTITY_INSERT设置为ON
问题描述:
我在数据库(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',但是当我向字符串中输入乱码时,它会抱怨合成器错误。
谁能告诉我我做错了什么?先谢谢你。
答
一旦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)
太感谢你了!这工作。 :D我很高兴我没有花费我的下午。 – Vraagteken