我需要在触发器 [UPDATE,DELETE,INSERT] 中确定这 3 个命令中的每一个。对于最后 2 个,我接下来要做:
IF EXISTS (SELECT * FROM inserted)
BEGIN
END
ELSE IF EXISTS (SELECT * FROM deleted)
BEGIN
END
如何获取更新行?谢谢。
我需要在触发器 [UPDATE,DELETE,INSERT] 中确定这 3 个命令中的每一个。对于最后 2 个,我接下来要做:
IF EXISTS (SELECT * FROM inserted)
BEGIN
END
ELSE IF EXISTS (SELECT * FROM deleted)
BEGIN
END
如何获取更新行?谢谢。
不完全确定您要完成什么,但您可以测试它UPDATE
是否同时 inserted
存在(更新后的值)和deleted
(更新前的值)。从文档中:
删除的表在 DELETE 和UPDATE语句期间存储受影响行的副本。在执行 DELETE 或 UPDATE 语句期间,行会从触发器表中删除并转移到已删除的表中。删除的表和触发器表通常没有共同的行。
插入的表在 INSERT 和UPDATE语句期间存储受影响行的副本。在插入或更新事务期间,新行会同时添加到插入表和触发器表中。插入表中的行是触发器表中新行的副本。
因此,如果inserted
存在但不存在deleted
,则它是INSERT
; 如果deleted
存在但不存在inserted
,则为DELETE
; 如果它们都存在,则为UPDATE
.