我在数据库Foo中有一个名为Bar的表,该表具有一个名为ID的列,这是主键,并且该数据库位于开发SQL Server上。

我试图将数据从生产服务器复制到开发服务器中,以便可以使用上述数据,因此我执行以下操作:

set IDENTITY_INSERT Foo.dbo.Bar ON
insert into Foo.dbo.Bar
(
   ID
   ,Something
   ,Else
   ,Is
   ,Going
   ,Horribly
   ,Wrong
   ,With
   ,SQL
)
select
  ID
  ,Something
  ,Else
  ,Is
  ,Going
  ,Horribly
  ,Wrong
  ,With
  ,SQL
from Production.Foo.dbo.Bar

set IDENTITY_INSERT Foo.dbo.Bar OFF

我得到了错误



嗯..好,因此为该表打开了IDENTITY_INSERT。因此,我从查询的顶部删除了SET IDENTITY_INSERT Foo.dbo.Bar ON,然后执行它,然后出现此错误:



我可以整天执行SET IDENTITY_INSERT Foo.dbo.Bar OFF,但是如果尝试将其打开ON,则SQL Server 2012表示IDENTITY_INSERT已经打开。

最佳答案

有趣-我刚在全新的ss2012数据库中使用4个表中的3个,却遇到了完全相同的问题。

因此,我重写了表创建脚本,以将插入内容括在“设置身份设置为开”和“设置身份设置为关”的括号内,并且可以正常工作。似乎ss一次只想处理一个表的身份,即您不能在关闭所有其他表之前设置新的表身份。

像这样的东西:

create table Employers
(
id int PRIMARY KEY IDENTITY ,
companyid nvarchar(50) not null,
companyName nvarchar(80) not null,
address nvarchar(80),
Phone nvarchar(10),
);

SET IDENTITY_INSERT employers ON;

insert into Employers(id,companyid,companyName,address,Phone)
Values
(...),
(...)

SET IDENTITY_INSERT employers OFF;

create table customers
(
...

10-07 15:40