批量更新的触发器问题

原来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值只有第一条记录更新了,下面改一下触发器

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 DECLARE AmountCursor CURSOR FOR SELECT personcode,Amount FROM #INS OPEN AmountCursor FETCH NEXT FROM AmountCursor INTO @PersonCode,@Amount WHILE @@FETCH_STATUS=0 BEGIN UPDATE TMP_TABLE2 SET Amount =@Amount WHERE PersonCode=@PersonCode FETCH NEXT FROM AmountCursor INTO @PersonCode,@Amount END CLOSE AmountCursor DEALLOCATE AmountCursor END

更新触发器后,一些正常。

总结:为了保险起见,update触发器还是要用游标来处理,才能保证全部触发执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值