【问题标题】: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]仅当使用列列表并且 IDENTITY_INSERT 为 ON [重复] 时,才能指定表“客户”中标识列的显式值
【发布时间】:2023-04-08 01:19:01
【问题描述】:

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

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

【问题讨论】:

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

标签: sql sql-server-2008-express


【解决方案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 (...)
      • 好的,让我试试这个。谢谢。
      • 问题已解决。非常感谢。
      • 这项工作与批量插入有关吗?
      猜你喜欢
      • 1970-01-01
      • 2011-07-08
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2013-06-05
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多