SQL Server错误:“即使在我设置IDENTITY_INSERT ON时,也无法为标识列插入显式值”

时间:2017-11-22 00:32:22

标签: sql sql-server sql-server-2012 insert insert-select

我真的好几次回顾,这就是我要问的原因;寻找指导...

我有一个表,如下面的脚本。然后,我设置./tutorial -/tutorial/tutorial <-- Project settings folder ./tutorial/snippets <-- App folder 。然后我尝试插入选择,(我需要相同的ID)

我一直收到这个错误:

  

Msg 544,Level 16,State 1,Line 2
  当IDENTITY_INSERT设置为OFF时,无法在表'Table1'中为identity列插入显式值。

有人知道为什么吗?在DB级别进行的任何设置都可以否决IDENTITY_INSERT ON

我感谢任何建议。在此先感谢并亲切的问候。

表格脚本:

IDENTITY_INSERT ON

插入声明:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].Table1
(
    [TableId] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](256) NOT NULL,
    [RowVersion] [timestamp] NOT NULL,
    [AddedDate] [datetime2](7) NOT NULL,
    [stuff2] [int] NOT NULL,
    [ModifiedDate] [datetime2](7) NOT NULL,
    [LastModifiedBy] [int] NOT NULL,

    CONSTRAINT [Table1_PK] 
        PRIMARY KEY CLUSTERED ([TableId] ASC)
) ON [PRIMARY]
GO

3 个答案:

答案 0 :(得分:3)

即使我在表上运行了SET IDENTITY_INSERT mytable ON命令,我仍然遇到相同的错误。我意识到这是因为我要关闭查询脚本中的行。

如果要用;关闭每一行,则SET IDENTITY_INSERT mytable ON命令将不适用于以下几行。


之类的查询
SET IDENTITY_INSERT mytable ON;
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole');

给出错误
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.

但是这样的查询将起作用:

SET IDENTITY_INSERT mytable ON
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole')
SET IDENTITY_INSERT mytable OFF;

似乎SET IDENTITY_INSERT命令仅适用于事务,而;将表示事务结束。

答案 1 :(得分:1)

非常感谢@Sami,你帮我实现正确的道路。 事实证明,你可以只使用IDENTITY_INSERT到一个表(因为显而易见的原因不是我经常做的事情)。 当我偶尔为几个表做的时候,我看到了错误,但由于表的名称相似,我认为这是一个错误,因为我之前在同一个表上运行了Identity_insert,但这是因为它是由另一张桌子。 在我逐一查看错误消息之前,我没有意识到。 :P:D

https://dba.stackexchange.com/questions/12650/why-is-identity-insert-on-only-allowed-on-one-table-at-a-time

答案 2 :(得分:0)

我遇到了同样的错误,然后我发现我在将PK设置为 Is Identity = true时(我的关系为1:1..0)时插入了一个显式值。我的子表使用父表的PK。 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]仅在 Is Identity = true并且表中没有冲突的情况下起作用。