3

我想INSERT在表格中立即X将该记录复制到另一个History表格中。

现在该表将主键作为Identity列,因此该记录在实际插入之前不会有主键 id。

我的问题是,如果我trigger在此记录上进行操作,我会获得该记录的身份 ID 还是仍为空白?

4

3 回答 3

5

是的,该身份在触发器中可用,但请确保您正确获取该 ID。

@@identity、SCOPE_IDENTITY 等不是您想要在触发器中执行的操作!

SELECT @id = id FROM inserted 

也是个坏主意。

始终编​​写触发器以期望同时进行多项更改。当您一次向表中插入多条记录时,上述方法都会导致细微但重要的错误。

正确的方法是从插入的表中插入您的审计表

IE

INSERT INTO myAuditTable(Id, Datetime, user)
SELECT id, GETDATE(), USER_NAME())
FROM inserted 
于 2011-08-03T19:10:34.457 回答
3

如果您执行“插入后”触发器,则记录已经存在,并带有标识列的值。

于 2011-08-03T19:00:16.510 回答
2

只要确保将触发器声明为“AFTER”插入,而不是“FOR”或“INSTEAD OF”(猜你不会使用最后一个......;)

http://msdn.microsoft.com/en-us/library/ms189799.aspx

于 2011-08-03T18:59:26.423 回答