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

时间:2012-10-03 07:16:46

标签: sql sql-server-2008-express

  

可能重复:
  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;

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

3 个答案:

答案 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)