我有一个表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中插入新记录时,我是否必须这样做?
答案 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是特定于会话的。所以是的,你需要每次都发出它。
相反,您应该从历史记录表中删除标识规范。你不需要它。