仅当使用列列表并且 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”中的标识列指定显式值