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

时间:2014-12-23 06:47:10

标签: sql sql-server database sql-server-2008 sql-server-2008-r2

我有两个表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已经为ON。无法对表'dbo.tblData2'

执行SET操作

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

3 个答案:

答案 0 :(得分:8)

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

所以在启用另一个之前,如果有的话,你应该转为现有的 如果表格数量较少,您可以在操作前后开启和关闭 如果表计数很大,您应该在操作之前以某种方式自动启用和禁用。

答案 1 :(得分:3)

您是否尝试更改订单

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 

答案 2 :(得分:1)

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