---事务:保障整个流程的完整执行,全部没有问题,统一提交,一旦有问题,回到原点。
begin tran --事务的开始
--开始写流程语句
--语句写完之后
if @@ERROR>0
begin
rollback tran--回滚事务
end
else
commit tran --提交事务
--级联删除套入事务中
alter trigger score_delete
on score
instead of delete
as
declare @count int
select @count=count(*)from deleted
declare @i int
set @i=0
while @i<@count --循环遍历delete临时表的数据,然后转移到备份表中
begin
declare @sno varchar(20)
declare @cno varchar(20)
declare @degree decimal(4,1)
select top 1 @sno=sno,@cno=cno,@degree=degree from deleted where
sno not in (select top (@i) sno from deleted)
or cno not in(select top (@i) cno from deleted)
--下面开始事务
begin tran
insert into scorebak values(@sno,@cno,@degree,getdate())
delete from score where sno =@sno and @cno=@cno
if @@error>0
begin
rollback tran
end
else
commit tran
set @i=@i+1
end
go
delete from score where Sno=109
select*from scorebak
drop table scorebak