我想INSERT
在表格中立即X
将该记录复制到另一个History
表格中。
现在该表将主键作为Identity
列,因此该记录在实际插入之前不会有主键 id。
我的问题是,如果我trigger
在此记录上进行操作,我会获得该记录的身份 ID 还是仍为空白?
我想INSERT
在表格中立即X
将该记录复制到另一个History
表格中。
现在该表将主键作为Identity
列,因此该记录在实际插入之前不会有主键 id。
我的问题是,如果我trigger
在此记录上进行操作,我会获得该记录的身份 ID 还是仍为空白?
是的,该身份在触发器中可用,但请确保您正确获取该 ID。
@@identity、SCOPE_IDENTITY 等不是您想要在触发器中执行的操作!
SELECT @id = id FROM inserted
也是个坏主意。
始终编写触发器以期望同时进行多项更改。当您一次向表中插入多条记录时,上述方法都会导致细微但重要的错误。
正确的方法是从插入的表中插入您的审计表
IE
INSERT INTO myAuditTable(Id, Datetime, user)
SELECT id, GETDATE(), USER_NAME())
FROM inserted
如果您执行“插入后”触发器,则记录已经存在,并带有标识列的值。
只要确保将触发器声明为“AFTER”插入,而不是“FOR”或“INSTEAD OF”(猜你不会使用最后一个......;)