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
我有同样的错误,然后我发现我插入了一个显式值,而我的 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
命令只适用于交易,;
表示交易结束。
我真的复习了好几遍,这就是我问的原因;寻找指导...
我有一个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
我有同样的错误,然后我发现我插入了一个显式值,而我的 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
命令只适用于交易,;
表示交易结束。