【问题标题】:Help needed with "Cannot insert explicit value for identity column" Error“无法为标识列插入显式值”错误需要帮助
【发布时间】:2011-06-14 22:42:43
【问题描述】:

我有一个表 Table1,我在其上创建了一个插入/更新触发器。这会触发将 Table1 上的插入/更新记录插入 Table1_history。为了测试触发器是否正在向 Table1_history 中插入记录,我在 Table1 中插入了一些测试数据,我收到错误:

Cannot insert explicit value for identity column in table 'Table1_history' when IDENTITY_INSERT is set to OFF  

Table1 和 Table1_history 的架构相同,只是 Table1_history 中多了一个“inserted_on_date”字段。

我已将 Identity Insert 设置为 ON 并且触发器工作。但是每次需要在 Table1 中插入新记录时都必须这样做吗?

【问题讨论】:

    标签: sql-server triggers


    【解决方案1】:

    将 IDENTITY INSERT ON 放入触发器本身,它只需要在您将值推送到 table1_history 时处于活动状态,因为这就是问题所在。

    或者,在 Table1_history 中,不要将 pk 字段设为 IDENTITY,因为您提供的是 Table1 中的值,所以不需要这样做。

    【讨论】:

      【解决方案2】:

      我假设您的“inserted_on_date”字段是日期时间。您应该能够关闭标识插入并将此列的默认值设置为GETDATE(),这会将任何新插入的记录设置为插入记录时服务器所具有的日期时间。

      【讨论】:

        【解决方案3】:

        你没有提到什么数据库,但我假设它是 SQL Server 2008。

        set identity on 命令是特定于会话的。所以是的,您需要每次都发出它。

        相反,您应该从历史表中删除身份规范。你不需要它。

        【讨论】:

          猜你喜欢
          • 2015-07-02
          • 2015-10-27
          • 1970-01-01
          • 2017-10-26
          • 2016-04-13
          • 2019-05-28
          • 1970-01-01
          相关资源
          最近更新 更多