批量更新的觸發器問題

2021-08-24 23:58:29 字數 2160 閱讀 6420

原來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觸發器還是要用游標來處理,才能保證全部觸發執行.

批量更新的觸發器問題

原來update觸發器只會被update觸發一次,無論更新的記錄數是多少,以下為驗證 create table tmp table1 personcode varchar 20 not null primary key,name varchar 50 null,depcode varchar 20 ...

觸發器批量分類更新

今天和採購部的黃生討論需求,系統中第一次寫入的時候指定預設值。條件有好幾專案,本來應該寫入到邏輯層的,實在不想寫 了,就想用觸發器搞定吧。批量第一腦子中就想用游標吧,nnd難道沒有別方法?想了想用case when 好像可以解決 author create date 2011 11 01 descr...

觸發器的更新

如何用一條sql語句,同時更新兩個表中的資料 2009年01月03日 星期六 17 34 用觸發器 在a表建更新b表對應資料的觸發器 這樣a表更新了,相應b表資料也會更新 如有a表,欄位id int name varchar 50 b表,欄位id int namebak varchar 50 先建a...