`
shirlly
  • 浏览: 1623686 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

SQL事务回滚的问题及其解决的方法

阅读更多
Begin Transaction:开始一个事务;
Commit Transaction:提交事务;
Rollback Transaction:回滚事务。

其中Commit Transaction 与Rollback Transaction 都必须有对应的Begin Transaction 才能正确被执行。

如:

Begin Tran
……
Rollback Tran
Commit Tran

以上事务只执行了回滚操作。执行Commit Tran系统会返回3902错误,即@@Error=3902,COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。

Begin Tran
……
Commit Tran
Rollback Tran

以上事务员执行了提交事务操作。执行Rollback Tran系统会返回3903错误,即@@Error=3903,ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。

实例:使用@@Error返回值来控制回滚

设有表a,有字段num (int),name (varchar(20));表b,有字段num (int),Add (varchar(50))。以下是一个存储过程,使用了@@Error的返回值来控件事件回滚:

CREATE PROCEDURE [dbo].[TranTest] 
@num int,@name varchar(20),@Add varchar(20)
AS
DECLARE @ErrorA int,@ErrorB int
begin transaction aa
insert into a values(@num,@name)
Set @ErrorA = @@error
insert into b values(@num,@Add)
Set @ErrorB = @@error
if @ErrorA>0 or @ErrorB>0
begin
Rollback transaction aa
end
else
commit transaction aa
GO


转自:
http://blog.csdn.net/dezwen/archive/2006/03/08/618844.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics