你使用CURSOR(游标)进行处理就可以了,例子: create trigger tri_test on test for insert as declare @id int,@sl float declare cur_test cursor for select id,sl from inserted open cur_test fetch next from cur_test into @id,@sl while @@fetch_status=0 begin update test1 set sl=sl+@sl where zkid=@id fetch next from cur_test into @id,@sl end一个简单的例子,当然使用触发器你应该对INSERTED、DELETED这两个临时表有一定的了解。
oracle 触发器分为表级触发器和行级触发器,如果是行级触发器,那么在事件申明的后面加上 for each row,表级触发器的含义是不管你这次操作对某表插入了多少条记录,触发器只触发一次 create or replace trigger test after insert or delete on aa for each row(行级触发器) begin IF INSERTING THEN IF :old.bb=0 THEN /*do somthing*/ END IF IF :old.bb=1 THEN /*do somthing*/ END IF END IFIF DELETING THEN IF :old.bb=0 THEN /*do somthing*/ END IF IF :old.bb=1 THEN /*do somthing*/ END IF END IF end;
sqlserver的语句是基于语句的。提交语句时,SQLSERVER利用inserted表和deleted表 记录新记录和修改后的记录。Inserted表和deleted 表结构和触发器对应的表结构一样的。 如果是Insert语句,只有inserted表有记录,是新插入的数据;如果是delete语句,只有deleted有记录,delete中是被删除的该表的记录。但如果是update语句,inserted表是 update后的改动的新记录,deleted表是update更新前被改动的老记录。 例如:有表aa中有字段id 有表bb有字段id,b1,…… 要求:当aa表增加一条记录时,bb表同时增加一条记录 当aa表删除一条记录时,bb表同时删除同样的记录 当 aa表id数据更新是,bb表的id同时更新。 Create trigger utr_test on aa for insert,uodate,delete As Begin /*先删除老记录*/ delete bb from deleted a,bb b where a.id = b.id Insert bb(id) select id from inserted End go
create trigger tri_test
on test
for insert
as
declare @id int,@sl float
declare cur_test cursor
for select id,sl from inserted
open cur_test
fetch next from cur_test
into @id,@sl
while @@fetch_status=0
begin
update test1 set sl=sl+@sl where zkid=@id
fetch next from cur_test
into @id,@sl
end一个简单的例子,当然使用触发器你应该对INSERTED、DELETED这两个临时表有一定的了解。
触发器分为表级触发器和行级触发器,如果是行级触发器,那么在事件申明的后面加上
for each row,表级触发器的含义是不管你这次操作对某表插入了多少条记录,触发器只触发一次
create or replace trigger test
after insert or delete on aa for each row(行级触发器)
begin
IF INSERTING THEN
IF :old.bb=0 THEN
/*do somthing*/
END IF
IF :old.bb=1 THEN
/*do somthing*/
END IF
END IFIF DELETING THEN
IF :old.bb=0 THEN
/*do somthing*/
END IF
IF :old.bb=1 THEN
/*do somthing*/
END IF
END IF
end;
记录新记录和修改后的记录。Inserted表和deleted 表结构和触发器对应的表结构一样的。
如果是Insert语句,只有inserted表有记录,是新插入的数据;如果是delete语句,只有deleted有记录,delete中是被删除的该表的记录。但如果是update语句,inserted表是
update后的改动的新记录,deleted表是update更新前被改动的老记录。
例如:有表aa中有字段id
有表bb有字段id,b1,……
要求:当aa表增加一条记录时,bb表同时增加一条记录
当aa表删除一条记录时,bb表同时删除同样的记录
当 aa表id数据更新是,bb表的id同时更新。
Create trigger utr_test
on aa for insert,uodate,delete
As
Begin
/*先删除老记录*/
delete bb from deleted a,bb b where a.id = b.id
Insert bb(id) select id from inserted
End
go