sql - 无法插入显式值,因为 IDENTITY_INSERT 为 OFF,但无法将 IDENTITY_INSERT 设置为 ON,因为它已为 ON

标签 sql insert sql-server-2012 identity-column

我在数据库中有一张表 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

我得到了错误

Msg 8107, Level 16, State 1, Line 1
IDENTITY_INSERT is already ON for table 'Foo.dbo.Bar'. Cannot perform SET operation for table 'Foo.dbo.Bar'.



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

Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'Bar' when IDENTITY_INSERT is set to OFF.



我可以执行 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
(
...

关于sql - 无法插入显式值,因为 IDENTITY_INSERT 为 OFF,但无法将 IDENTITY_INSERT 设置为 ON,因为它已为 ON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347946/

相关文章:

python - 带有 Python 的 Mysql 无法插入具有自动增量 ID 的记录,为什么?

php - 将 postgresql the_geom 函数添加到 php 插入

sql-server - 在部署后脚本中批量插入

sql - 有没有办法在整个过程中持久保存变量?

sql-server - 如何在 SQL Server 2012 中删除列中的双引号

MySQL GROUP BY CASE 错误

sql - 替换存储在 SQL Server 数据库列中的 XML 中的节点名称

SQL 服务器 : drop schema with special characters

PHP MySQL 数据库类不适用于插入

sql - 将外键绑定(bind)到非主键时有什么缺点吗?