トリガーがオンに設定されているテーブルEmployeeSalaryHistory
の更新時に、監査履歴テーブル ( ) に新しいレコードを挿入することになっているトリガーがあります。Employees
テーブル内のすべての行が更新される場所で実行すると、更新される行の数よりも多くの回数トリガーが呼び出されますUPDATE
。Employees
たとえば、Employees
テーブルに3 つの行がある場合、 INSERT
9 回発生します。
/*This UPDATE will cause the trigger to fire more than the number of rows in the Employees table.*/
UPDATE Employees SET Salary = Salary * 2
/* supposed to be fired whenever the salary of an employee is updated */
CREATE TRIGGER [dbo].[EmployeesUpdateSalary] ON [dbo].[Employees]
AFTER UPDATE
NOT FOR REPLICATION
AS
BEGIN
INSERT INTO EmployeeSalaryHistory(EmployeeID, NewSalary, OldSalary)
SELECT I.EmployeeID, I.Salary, D.Salary
From inserted I, deleted D
WHERE I.Salary <> D.Salary
END