I have a table Product and another table ProductLog.
The log table needs to track two columns in the Product table. Each time
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.
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