【问题标题】:SET IDENTITY_INSERT gives an error - IDENTITY_INSERT is already ON for table [closed]SET IDENTITY_INSERT 给出错误 - 表的 IDENTITY_INSERT 已经打开 [关闭]
【发布时间】:2020-07-26 16:12:00
【问题描述】:

使用简单的插入语句,我正在尝试使用 PK 键显式地将数据插入表中,该 PK 键本身定义了 Identity 属性。但是当我运行下面的语句时,我收到了一条奇怪的错误消息

SET IDENTITY_INSERT MyDB.dbo.MyTable ON

消息 8107,第 16 级,状态 1,第 163 行
表 'MyDB.dbo.AnotherTable' 的 IDENTITY_INSERT 已打开。无法对表“MyDB.dbo.MyTable”执行 SET 操作。

当这个Identity_Insert 被指定为MyDB.dbo.MyTable 时,为什么它会抱怨MyDB.dbo.AnotherTable

其他一些表格也给出了类似的错误。

【问题讨论】:

标签: sql sql-server foreign-keys primary-key identity-column


【解决方案1】:

根据documentation

在任何时候,会话中只有一个表可以将 IDENTITY_INSERT 属性设置为 ON。

如果您需要将显式 IDENTITY 值插入到多个表中,请确保在移至下一个表之前将其设置为前一个表的 OFF。

【讨论】:

  • 知道如何找出哪个表的 IDENTTY_INSERT ON 用于您的会话吗?
  • @MicahEpps,我不这么认为。这是特定于您的连接的,因此无法从系统表中提取。您的代码应该“知道”哪个表启用了identity_insert。重新连接或使用不同的连接可能是一种合适的方法。
  • 我将它设置为 ON 并尝试将其放入 try catch 块中,但它仍然错误地说它已经打开并且不再继续,这根本没有意义。我在 TEMP TABLE BTW 上使用它
  • @ajgo,看看这个答案:stackoverflow.com/a/14774939 - 你就是这样做insert吗?
【解决方案2】:

问题是我的 SQL Server 2016 连接到服务器。一旦我断开连接并重新连接,一切正常!

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2011-02-20
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2016-06-05
    • 2013-03-22
    • 2015-05-10
    相关资源
    最近更新 更多