【问题标题】:SQL Server trigger on insert,delete & update on tableSQL Server 在表上插入、删除和更新时触发
【发布时间】:2011-09-07 05:32:56
【问题描述】:

我有一张桌子Product 和另一张桌子ProductLog

日志表需要跟踪Product 表中的两列。每次在这些列上插入、更新或删除时,我都需要更新日志表。

我需要编写三个单独的触发器,还是一个触发器可以处理这些操作?

我还需要知道操作的类型,例如我需要知道日志表中的条目是因为插入、删除还是更新。如果有人能给我一个例子,那就太好了。

【问题讨论】:

    标签: sql-server datatrigger


    【解决方案1】:

    你只需要一个触发器

    CREATE TRIGGER [ProductAfter] ON [Product] AFTER INSERT, UPDATE, DELETE
    

    您可以根据触发器主体中可用的inserteddeleted 表中的记录数来确定触发触发器的 DML 语句。对于INSERTdeleted 为空,对于DELETEinserted 为空,对于UPDATEinserteddeleted 都不为空。例如,

    IF @@ROWCOUNT = 0 -- exit trigger when zero records affected
    BEGIN
       RETURN;
    END;
    DECLARE @type CHAR(1);-- 'U' for update, 'D' for delete, 'I' for insert
    IF EXISTS(SELECT * FROM inserted)
    BEGIN
      IF EXISTS(SELECT * FROM deleted)
      BEGIN
         SET @type ='U';
      END
      ELSE
      BEGIN
         SET @type ='I';
      END
    END
    ELSE
    BEGIN
      SET @type = 'D';
    END;
    

    另外,看看Tracking Data Changes,还有另一个选项可以在没有触发器的情况下跟踪更改。

    【讨论】:

      【解决方案2】:

      或者只是

      DECLARE @type CHAR(1)=
          case when not exists(SELECT * FROM inserted)
              then 'D'
          when exists(SELECT * FROM deleted)
              then 'U'
          else
              'I'
          end
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 2011-11-25
      • 1970-01-01
      • 2015-11-06
      • 2022-01-01
      • 2012-01-20
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多