如何在 SQL Server 2008 中一次为多个表设置 SET IDENTITY_INSERT ON



我有两个表tblData1tblData2,现在我想从另一个带有标识插入的表中迁移记录,我正在尝试运行如下所示的命令

SET IDENTITY_INSERT LP1.dbo.tblData1 ON
GO
SET IDENTITY_INSERT LP1.dbo.tblData2 ON
GO
INSERT INTO LP1.DBO.tblData1 (ID,DATA)
SELECT ID,DATA FROM LP.DBO.tblData1
GO
INSERT INTO LP1.DBO.tblData2 (ID,DATA)
SELECT ID,DATA FROM LP.DBO.tblData2
GO
SET IDENTITY_INSERT LP1.dbo.tblData1 OFF
GO
SET IDENTITY_INSERT LP1.dbo.tblData2 OFF
GO

但它显示的错误如下

表 'Sample_Training.dbo.tblData1' 的 IDENTITY_INSERT 已打开。无法对表"dbo.tblData2"执行 SET 操作

是否可以在 SQL Server 2008 中一次执行多个IDENTITY_INSERT

在任何时候,会话中只有一个表可以将 IDENTITY_INSERT 属性设置为 ON。

因此,在启用另一个之前,您应该打开现有的(如果有的话)。
如果表数较少,您可以在操作前后打开和关闭。
如果表计数很大,则应在操作之前以某种方式自动启用和禁用。

您是否尝试更改顺序

go
SET IDENTITY_INSERT LP1.dbo.tblData1 ON
INSERT INTO LP1.DBO.tblData1
            (ID,DATA)
SELECT ID,DATA
FROM   LP.DBO.tblData1
SET IDENTITY_INSERT LP1.dbo.tblData1 OFF
GO
SET IDENTITY_INSERT LP1.dbo.tblData2 ON
INSERT INTO LP1.DBO.tblData2
            (ID,DATA)
SELECT ID,DATA
FROM   LP.DBO.tblData2
SET IDENTITY_INSERT LP1.dbo.tblData2 OFF
GO 

在单个会话中,一次只能为一个表设置Identity_Insert。如果表之间没有数据依赖关系,则可以打开多个会话,每个会话处理一组不同的表。每个会话可以设置一个identy_insert表。

最新更新