--用全局变量@@error来判断事务在执行过程是否发生错误 begin tran declare @error int =0 --声明一个局部变量 接收全局@@error set @error=@error+@@ERROR update TblScore set tEnglish=59 where tScoreId=12 set @error=@error+@@ERROR if(@error>0) begin rollback tran; print 'update failed' end else begin commit tran; print 'success' end
现在问题是,事物执行回滚了,也会返回0,但是,同时抛出异常,导致程序中捕获到异常报错。
begin try BEGIN tran tran_2013 if @type=1 begin if @CD1<>0 begin insert语句 end if @CD2<>0 begin insert语句 end if @CD3<>0 begin insert语句 end if @CD4<>0 begin insert语句 end end else if @type=2 begin update 语句 end commit tran tran_2013 --执行这个事务的操作 return 1 end try begin catch rollback tran tran_2013 --开始执行事务的回滚,恢复的转账开始之前状态 return 0 end catch
这个有问题吗
@so...: 事务是一系列的操作语句,看成一个整体,如果有一个执行出问题,就回滚的,你这样写,怎么感觉有点怪!根据事务的原子性,要嘛全部执行,要嘛全部都不执行!
@冰壶秋月: 事务是执行了的,我测试过了,但是会抛出异常
这样的语句,不能直接return吧。把return改为select就行了。然后对结果进行判断。
试过,没用
@so...:没用?我可是亲测有用的哦。
@幻天芒: 现在问题是,事物执行回滚了,也会返回0,但是,同时抛出异常,导致程序中捕获到异常报错。
@so...: 直接在c#中用事务呢!
sql server2012 支持 try and catch 了