A common mistake that I’ve seen is the assumption that a DML trigger is fired once for each record modified. This is not true. A good SQL developer will use set-based DML statements to alter multiple records at a time. Regardless of how many records may have been changed, the table’s DML trigger will fire only once. The trigger’s INSERTED & DELETED tables will contain all the records affected. I don’t like triggers, but if you find yourself in a pickle and need one… make sure you code for the possibility that more than one record was changed.
BAD trigger:
CREATE TRIGGER trgTableA ON TableA FOR UPDATE AS DECLARE @ID int, @name varchar(50); SELECT @ID = i.ID, @name = i.Name FROM inserted i; UPDATE TableB SET Name = @name WHERE ID = @ID; GO
GOOD trigger:
CREATE TRIGGER trgTableA ON TableA FOR UPDATE AS UPDATE b SET b.Name = i.Name FROM TableB b INNER JOIN inserted i ON i.ID = b.ID; GO