SQL Server error: "Cannot insert explicit value for identity column" even when I SET IDENTITY_INSERT ON

SQL Server error: "Cannot insert explicit value for identity column" even when I SET IDENTITY_INSERT ON

我真的复习了好几遍,这就是我问的原因;寻找指导...

我有一个table,如下脚本。然后,我设置 IDENTITY_INSERT ON。然后我尝试插入 select,(我需要完全相同的 ID)

我不断收到此错误:

Msg 544, Level 16, State 1, Line 2
Cannot insert explicit value for identity column in table 'Table1' when IDENTITY_INSERT is set to OFF.

有人知道为什么吗?数据库级别的任何设置都可以否决 IDENTITY_INSERT ON?

我很感激任何建议。提前致谢并致以亲切的问候。

table 的脚本:

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

插入语句:

SET IDENTITY_INSERT [dbo].Table1 ON;

INSERT INTO [dbo].Table1 ([TableId], [Name], [AddedDate], [stuff2], [ModifiedDate], [LastModifiedBy])
    SELECT 
        [RoleID], [Name], [AddedDate], [stuff2], [ModifiedDate], [LastModifiedBy] 
    FROM 
        [dbo].Table2

非常感谢@Sami,您帮助我实现了正确的道路。 事实证明,您可以一次只使用 IDENTITY_INSERT 到一个 table(出于明显的原因,我不经常这样做)。 当我一次做几个 tables 时,我看到了错误,但是由于 tables 的名称相似,我认为它会抛出错误,因为我 运行 Identity_insert之前在同一个table上,但是因为被另一个table占用了。 直到我一条一条地查看错误消息,我才意识到。 :P:D

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

我有同样的错误,然后我发现我插入了一个显式值,而我的 PK 设置为 Is Identity = true,而我的关系是 1:1..0,意思是我的child table使用了Parent table的PK。 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 仅在 Is Identity = true 且您的 table.

中没有冲突时才有效

即使我在 table 上使用了 运行 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命令只适用于交易,;表示交易结束。