zoukankan      html  css  js  c++  java
  • 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 TRANSACTIONBegin 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  
  • 相关阅读:
    [BZOJ 2820]YY的GCD
    [POI 2007]ZAP-Queries
    [USACO 04OPEN]MooFest
    [HAOI 2011]Problem b
    [COGS 2258][HZOI 2015]复仇的序幕曲
    [UOJ 41]【清华集训2014】矩阵变换
    [POJ 3487]The Stable Marriage Problem
    [POJ 3252]Round Numbers
    [COGS 1799][国家集训队2012]tree(伍一鸣)
    [SDOI 2011]计算器
  • 原文地址:https://www.cnblogs.com/iwenwen/p/3133506.html
Copyright © 2011-2022 走看看