SQL Server trigger on insert,delete & update on table
Asked Answered
B

2

9

I have a table Product and another table ProductLog.

The log table needs to track two columns in the Product table. Each time there is an insert, update or delete on those columns I need to update the log table.

Do I need to write three separate triggers, or can one trigger handle these operations?

I also need to know the type of operation, for example I will need to know if the entry in the log table was because of insert or delete or update. If any one give me an example that would be great.

Braeunig answered 2/6, 2011 at 16:42 Comment(0)
I
24

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.

Irrespirable answered 2/6, 2011 at 17:9 Comment(0)
G
8

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
Galantine answered 8/11, 2012 at 13:24 Comment(1)
I have same issue some one can help me. See the following link #26043606Fleabite

© 2022 - 2024 — McMap. All rights reserved.