可能重复:
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'中标识列的显式值。
我搜索了stackoverflow。找到了一些类似的问题,但无法理解解释。请帮助我理解错误并纠正错误。
编辑:
我试着这样做:
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;
但我又得到了同样的错误。
答案 0 :(得分:15)
试试这个
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
答案 1 :(得分:2)
当表使用标识字段时,它会选择它自己的值。它会跟踪这些值,以确保它永远不会尝试输入重复项,如果您尝试指定自己的副本,则会产生此错误。
因此,在您的情况下,A插入行而没有标记为标识字段的字段;让sql引擎为该字段选择自己的值。 (这就是你使用身份字段的全部原因)
或者,B。在运行插入之前启用identity_insert(如果您有充分的理由将特定值作为键插入)。
您还需要使用valid insert statement。指定要插入的列以及值。
答案 2 :(得分:2)
如果您的第一个值是标识列,那么只需删除它,如下所示:
insert into customers
values('Singh','rajnish','101 bhandup','mumbai','mp',33321,0,null,123.89,25.00)