怎么才能使这个存储过程具有原子性
为什么下面我写的存储过程在执行的过程中失败的时候,失败之前的修改还被提交给系统,我用了set xact_abort on。怎么样做才能才能在这个存储过程失败的时候,将所有之前的操作撤消。
if exists(select name from sysobjects where name='init_wage' and type='p')
drop procedure init_wage
go
create procedure init_wage @wage_date smalldatetime,@wtemplate int
as
set xact_abort on
declare @max_num int,@serial int,@wid int
declare @bwage money
set @max_num=(select max(wage_num) from emp_wage)
if @max_num is null set @max_num=0
declare c1 cursor for
select serial,basic_wage from basic where state=1
open c1
fetch next from c1 into @serial,@bwage
while @@fetch_status=0
begin
set @max_num=@max_num+1
if @bwage is null set @bwage=0
insert into emp_wage(wage_num,wage_date,wage_basic,wage_ought,wage_get)
values(@max_num,@wage_date,@bwage,@bwage,@bwage)
declare c2 cursor for select w_id from template where t_id=@wtemplate
open c2
fetch next from c2 into @wid
while @@fetch_status=0
begin
insert into wage(wage_num,item,amount) values(@max_num,@wid,0)
fetch next from c2 into @wid
end
close c2
deallocate c2
fetch next from c1 into @serial,@bwage
end
close c1
deallocate c1
if exists(select name from sysobjects where name='init_wage' and type='p')
drop procedure init_wage
go
create procedure init_wage @wage_date smalldatetime,@wtemplate int
as
set xact_abort on
declare @max_num int,@serial int,@wid int
declare @bwage money
set @max_num=(select max(wage_num) from emp_wage)
if @max_num is null set @max_num=0
declare c1 cursor for
select serial,basic_wage from basic where state=1
open c1
fetch next from c1 into @serial,@bwage
while @@fetch_status=0
begin
set @max_num=@max_num+1
if @bwage is null set @bwage=0
insert into emp_wage(wage_num,wage_date,wage_basic,wage_ought,wage_get)
values(@max_num,@wage_date,@bwage,@bwage,@bwage)
declare c2 cursor for select w_id from template where t_id=@wtemplate
open c2
fetch next from c2 into @wid
while @@fetch_status=0
begin
insert into wage(wage_num,item,amount) values(@max_num,@wid,0)
fetch next from c2 into @wid
end
close c2
deallocate c2
fetch next from c1 into @serial,@bwage
end
close c1
deallocate c1
...全文
相关推荐
mysql索引、触发器、事务、存储过程说明
mysql索引、触发器、事务、存储过程说明
MySQL数据库存储过程和事务的区别讲解
今天小编就为大家分享一篇关于MySQL数据库存储过程和事务的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Mysql-事务与存储过程.pdf
mysql -事务与存储过程.pdf
事务,反射,存储过程
里面有sql server事务,和c#程序事务,反射实例。数据库事务可以按照顺序执行脚步文件生成事务的存储过程,还有一个反射实例,执行.dll文件。sql server生成表时,可能要根据事务脚本改下表结构,就可以直接运行。
银行转帐存储过程
模拟银行转帐过程的存储过程,实现登录,转帐的管理,可根据返回的信息判断错误,实现事务操作


