要注意:触发器的触发是操作,而不是针对行记录,这也是为什么我一次删除、新增很多数据时结果只有一条记录被触发出来,在面对一条sql语句删除了、新增了多条记录时需要使用游标进行操作
SQL Server
场景:三张表 On_Duty,On_Duty_Future,On_Duty_History1
在On_Duty中删除一条记录,就把数据插入到另外两张表中,数据库语句如下:
create trigger triForHiry
on On_Duty
for delete
as
begin
declare YB CURSOR /*声明游标*/
for
select ID,Base from deleted
open YB
declare @ID int,@Base varchar(20)
fetch next from YB into @ID,@Base/*读取第一条数据*/
while(@@fetch_status=0) /*表示成功执行fetch语句*/
begin
/* 将On_Duty_Future中相应的值班信息存入On_Duty*/
insert into On_Duty_Future values(@ID,@Base,'','','','','','')
insert into On_Duty_History1 values(@ID,@Base,'','','','','','')
fetch next from YB into @ID,@Base /*游标下移*/
end
close YB
deallocate YB
end
最后结果就是执行一条删除多条数据的sql语句,在其他两张表中新增了删除数量的数据。