0

我需要在触发器 [UPDATE,DELETE,INSERT] 中确定这 3 个命令中的每一个。对于最后 2 个,我接下来要做:

    IF EXISTS (SELECT * FROM inserted)
      BEGIN 

      END
    ELSE IF EXISTS (SELECT * FROM deleted)
      BEGIN 

      END 

如何获取更新行?谢谢。

4

1 回答 1

3

不完全确定您要完成什么,但您可以测试它UPDATE是否同时 inserted存在(更新的值)和deleted(更新的值)。从文档中:

删除的表在 DELETE 和UPDATE语句期间存储受影响行的副本。在执行 DELETE 或 UPDATE 语句期间,行会从触发器表中删除并转移到已删除的表中。删除的表和触发器表通常没有共同的行。

插入的表在 INSERT 和UPDATE语句期间存储受影响行的副本。在插入或更新事务期间,新行会同时添加到插入表和触发器表中。插入表中的行是触发器表中新行的副本。

因此,如果inserted存在但不存在deleted,则它是INSERT; 如果deleted存在但不存在inserted,则为DELETE; 如果它们都存在,则为UPDATE.

于 2012-09-04T22:36:44.363 回答