2

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

我有一张桌子,如下面的脚本。然后,我设置IDENTITY_INSERT ON. 然后我尝试进行插入选择,(我需要相同的 ID)

我不断收到此错误:

消息 544,级别 16,状态 1,第 2
行当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'Table1' 中插入标识列的显式值。

有人知道为什么吗?数据库级别的任何设置都可以否决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

插入语句:

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
4

3 回答 3

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命令仅适用于交易,而;will 表示交易的结束。

于 2020-05-19T04:26:00.407 回答
2

非常感谢@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

于 2017-11-22T00:52:43.120 回答
0

我有同样的错误,然后我发现我插入了一个显式值,而我的 PK 设置为Is Identity = true,而我的关系是 1:1..0,这意味着我的子表使用父表的 PK . [DatabaseGenerated(DatabaseGeneratedOption.Identity)]仅当Is Identity = true 并且您的表中没有冲突时才有效。

于 2018-06-28T02:27:46.683 回答