批量更新數據時候,Inserted和Deleted臨時表也是批量的,但觸發器只會調用執行一次!兩個概念千萬不要弄混淆!
錯誤的理解;例如:創建在A表上創建了一個Update觸發器,里面寫的是Update一條記錄;當在A表進行update數據時候,會調用執行觸發器一次,不可能因為觸發器中有Update語句會又執行一次,那樣豈不是死循環了。。
本文章轉載:http://blog.csdn.net/baronyang/article/details/5174734
原來update觸發器只會被update觸發一次,無論更新的記錄數是多少,以下為驗證代碼
CREATE TABLE TMP_TABLE1 (PersonCode VARCHAR(20) NOT NULL PRIMARY KEY,[NAME] VARCHAR(50) NULL,DepCode VARCHAR(20) NULL,Amount MONEY null) CREATE TABLE TMP_TABLE2 (PersonCode VARCHAR(20) NOT NULL PRIMARY KEY,[NAME] VARCHAR(50) NULL,DepCode VARCHAR(20) NULL,Amount MONEY null) GO INSERT INTO TMP_TABLE1(PersonCode,[NAME],Amount) VALUES('00001','AAA1',1000) INSERT INTO TMP_TABLE1(PersonCode,[NAME],Amount) VALUES('00002','AAA2',1000) INSERT INTO TMP_TABLE1(PersonCode,[NAME],Amount) VALUES('00003','AAA3',1000) INSERT INTO TMP_TABLE1(PersonCode,[NAME],Amount) VALUES('00004','AAA4',1000) INSERT INTO TMP_TABLE1(PersonCode,[NAME],Amount) VALUES('00005','AAA5',1000) INSERT INTO TMP_TABLE2(PersonCode,[NAME],Amount) VALUES('00001','AAA1',1000) INSERT INTO TMP_TABLE2(PersonCode,[NAME],Amount) VALUES('00002','AAA2',1000) INSERT INTO TMP_TABLE2(PersonCode,[NAME],Amount) VALUES('00003','AAA3',1000) INSERT INTO TMP_TABLE2(PersonCode,[NAME],Amount) VALUES('00004','AAA4',1000) INSERT INTO TMP_TABLE2(PersonCode,[NAME],Amount) VALUES('00005','AAA5',1000) GO Alter TRIGGER dbo.tmp_table1_update ON tmp_table1 AFTER UPDATE AS SELECT * INTO #INS FROM INSERTED DECLARE @PersonCode VARCHAR(20),@Amount MONEY IF UPDATE(Amount) BEGIN SELECT @personcode=personcode,@Amount=Amount FROM #INS UPDATE TMP_TABLE2 SET Amount =@Amount WHERE PersonCode=@PersonCode END GO UPDATE TMP_TABLE1 SET Amount = 2000 select * from TMP_TABLE1 SELECT * FROM TMP_TABLE2
然后再更新,發現TMP_TABLE1的Amount字段值都更新為2000,但TMP_TABLE2的Amount值只有第一條記錄更新了,下面改一下觸發器