我在数据库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
(
...