我真的好几次回顾,这就是我要问的原因;寻找指导...
我有一个表,如下面的脚本。然后,我设置./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
答案 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
答案 2 :(得分:0)
我遇到了同样的错误,然后我发现我在将PK设置为 Is Identity = true时(我的关系为1:1..0)时插入了一个显式值。我的子表使用父表的PK。 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
仅在 Is Identity = true并且表中没有冲突的情况下起作用。