仅当使用列列表并且 IDENTITY_INSERT 为 ON [重复] 时,才能指定表“客户”中标识列的显式值

Posted

技术标签:

【中文标题】仅当使用列列表并且 IDENTITY_INSERT 为 ON [重复] 时,才能指定表“客户”中标识列的显式值【英文标题】:An explicit value for the identity column in table 'customers' can only be specified when a column list is used and IDENTITY_INSERT is ON [duplicate] 【发布时间】:2012-09-24 02:12:48 【问题描述】:

可能重复:Cannot insert explicit value for identity column in table ‘table’ when IDENTITY_INSERT is set to OFF

我是 SQL 新手。我正在尝试在 SQL Server 2008 Express 版中编写 INSERT 查询。

查询是:

insert into customers
values(201, 'Singh', 'rajnish', '101 bhandup', 'mumbai', 'mp', 33321, 0, null, 123.89, 25.00)

但我收到以下错误。

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表 'customers' 中的标识列指定显式值。

我搜索了***。发现了一些类似的问题,但无法理解解释。请帮助我理解错误并纠正它。

编辑:

我试过了:

SET IDENTITY_INSERT customers ON;
insert into customers
values(201, 'Singh', 'rajnish', '101 bhandup', 'mumbai', 'mp', 33321, 0, null, 123.89, 25.00)
SET IDENTITY_INSERT customers OFF;

但我又遇到了同样的错误。

【问题讨论】:

要么不为标识列插入显式值,要么使用SET IDENTITY_INSERT customers ON 允许您这样做。 我看到了那个答案并尝试了我编辑中提到的解决方案之一。但它又给出了同样的错误。 而您又没有阅读错误“...当使用列列表并且 IDENTITY_INSERT 为ON”。你已经解决了第二部分,但不是第一部分。 意味着我必须使用 colmun 列表? 【参考方案1】:

当表使用标识字段时,它会选择自己的值。它会跟踪这些值以确保它永远不会尝试输入重复值,并且如果您尝试指定自己的值,则会产生此错误。

因此,在您的情况下,A 插入没有标记为标识字段的字段的行;让 sql 引擎为该字段选择它自己的值。 (这就是您正确使用身份字段的全部原因)

或者,B. 在运行插入之前启用identity_insert(如果您有充分的理由插入特定值作为键)。

您还需要使用valid insert statement。指定要插入的列以及值。

【讨论】:

【参考方案2】:

如果您的第一个值是标识列,则只需将其删除,如下所示:

insert into customers
values('Singh','rajnish','101 bhandup','mumbai','mp',33321,0,null,123.89,25.00)

【讨论】:

【参考方案3】:

试试这个

SET IDENTITY_INSERT customers ON
GO
insert into customers(id, ...)
values(201,'Singh','rajnish','101 bhandup','mumbai','mp',33321,0,null,123.89,25.00)
SET IDENTITY_INSERT customers OFF

【讨论】:

我也试过这个查询,但又遇到同样的错误。 您需要列列表。 insert into customers(id, foo, bar) values (...) 好的,让我试试这个。谢谢。 问题已解决。非常感谢。 这项工作与批量插入有关吗?

以上是关于仅当使用列列表并且 IDENTITY_INSERT 为 ON [重复] 时,才能指定表“客户”中标识列的显式值的主要内容,如果未能解决你的问题,请参考以下文章

仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Address'中的标识列指

仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表‘faceid‘中的标识列指定显式值。

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“Fee”中的标识列指定显式值

只有在使用列列表并且 IDENTITY_INSERT 为 ON SQL Server 时,才能为表中的标识列指定显式值

Sql进阶语法

在sqlserver中对某张表主键使用identity(自动增长)时,在对该张表再进行插入数据,数据插不了,且出现如