“无法为标识列插入显式值”错误所需的帮助

时间:2011-01-25 03:04:07

标签: sql-server triggers

我有一个表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中插入新记录时,我是否必须这样做?

3 个答案:

答案 0 :(得分:3)

将IDENTITY INSERT ON置于触发器本身,它只需要在将值推入table1_history时激活,因为这就是问题所在。

或者,在Table1_history中,不要将pk字段设为IDENTITY,它不需要是因为您提供了Table1中的值。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

相反,您应该从历史记录表中删除标识规范。你不需要它。