SQL Server trigger on insert,delete & update on table

后端 未结 2 1464
-上瘾入骨i
-上瘾入骨i 2020-12-31 16:28

I have a table Product and another table ProductLog.

The log table needs to track two columns in the Product table. Each time

相关标签:
2条回答
  • 2020-12-31 17:14

    You need just one trigger

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

    You can determine which DML statement fires the trigger based on number of records in inserted and deleted tables available within trigger body. For INSERT, deleted is empty, for DELETE, inserted is empty, for UPDATE both inserted and deleted are not empty. For example,

    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;
    

    Also, take a look on Tracking Data Changes, there is another option for tracking changes without triggers.

    0 讨论(0)
  • 2020-12-31 17:19

    or just

    DECLARE @type CHAR(1)=
        case when not exists(SELECT * FROM inserted)
            then 'D'
        when exists(SELECT * FROM deleted)
            then 'U'
        else
            'I'
        end
    
    0 讨论(0)
提交回复
热议问题