12

可能重复:
当 IDENTITY_INSERT 设置为 OFF 时,无法在表“表”中插入标识列的显式值

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

查询是:

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;

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

4

3 回答 3

18

试试这个

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
于 2012-10-03T07:22:45.273 回答
4

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

insert into customers
values('Singh','rajnish','101 bhandup','mumbai','mp',33321,0,null,123.89,25.00)
于 2012-10-03T07:20:40.967 回答
2

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

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

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

您还需要使用有效的插入语句。指定要插入的列以及值。

于 2012-10-03T07:19:11.577 回答