zoukankan      html  css  js  c++  java
  • [转]SQL事务回滚的问题及其解决的方法

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

    原文:http://shirlly.javaeye.com/blog/370973

    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的返回值来控件事件回滚:

     
    1. CREATE PROCEDURE [dbo].[TranTest]    
    2. @num int,@name varchar(20),@Add varchar(20)   
    3. AS   
    4. DECLARE @ErrorA int,@ErrorB int  
    5. begin transaction aa   
    6. insert into a values(@num,@name)   
    7. Set @ErrorA = @@error  
    8. insert into b values(@num,@Add)   
    9. Set @ErrorB = @@error  
    10. if @ErrorA>0 or @ErrorB>0  
    11. begin   
    12. Rollback transaction aa   
    13. end   
    14. else  
    15. commit transaction aa   
    16. GO  
  • 相关阅读:
    第二阶段站立会议(3)
    第二阶段站立会议(2)
    第二阶段站立会议(1)
    返回一个最大联通子数组的和
    场景调研
    课程改进意见
    百度搜索引擎——评价
    求1的个数
    《校园封神榜》个人工作总结——第十天
    《校园封神榜》个人工作总结——第九天
  • 原文地址:https://www.cnblogs.com/sgivee/p/1771049.html
Copyright © 2011-2022 走看看