如何在SQL Server 2008中同时为多个表设置IDENTITY_INSERT ON

如何在SQL Server 2008中同时为多个表设置IDENTITY_INSERT ON,sql,sql-server,database,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Database,Sql Server 2008,Sql Server 2008 R2,我有两个表tblData1和tblData2,现在我想用identity insert从另一个表迁移记录,我正在尝试运行如下所示的命令 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

我有两个表
tblData1
tblData2
,现在我想用identity insert从另一个表迁移记录,我正在尝试运行如下所示的命令

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\u Training.dbo.tblData1”的标识\u INSERT已启用。无法对表“dbo.tblData2”执行设置操作


是否可以在SQL Server 2008中同时执行多个
标识\u插入

是否尝试更改顺序

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\u INSERT属性可以设置为ON。

因此,在启用另一个之前,您应该先关闭现有的(如果有的话)。
如果表格数量较少,则可以在操作前后打开和关闭表格。

如果表计数很大,您应该在操作之前以某种方式自动启用和禁用

在单个会话中,一次只能为一个表设置Identity\u Insert。
如果表之间没有数据相关性,则可以打开多个会话,每个会话处理一组不同的表。每个会话都可以为IDENTITY_insert设置一个表。

此链接应该可以帮助您了解如何使用或不使用IDENTITY_insert:似乎这两个插入操作是相互独立的。不能为一个表插入打开identity insert,关闭它,然后对第二个表执行相同的操作吗?我需要将数据从LP数据库中的一个表迁移到启用identity_insert的LP1数据库中的另一个表@AndrewBarries我试过了,但是我有很多表,所以我正在搜索是否有可能像我上面提到的那样。@Dineshalla尝试按上述顺序动态生成插入脚本我需要将表数据迁移到AMAZON服务器,所以我正在这样做。我需要将表数据迁移到AMAZON服务器,所以我正在这样尝试。是否有更好的选择否您应该向目标数据库生成insert语句,并动态添加前缀和SET IDENTITY_insert。是否可以在SQL Server 2008中的不同会话中同时执行多个IDENTITY_insert。设置测试用例以进行检查非常容易。创建两个具有标识列的表。然后从两个不同的会话中,将其中一个表设置为Identity_Insert On并插入一条记录。我在2012年这样做是为了验证。我没有要检查的2008年环境。