在存储过程中有事务处理,如何判断是提交还是回滚呢?是不是判断@@error=0呢?
------------------------------------------
1.是不是没进行一次操作(比如 insert update ,delete),就要判断一次呀,如果操作失败就会滚,正常就继续执行后面的代码。最好一步操作没有问题,就提交。2.每一步判断时,判断什么呢,是不是 @@error 的只是不是为03.我的思路对吗?是不是理解有误呀?

解决方案 »

  1.   

    1、是每一步时都要判断,确保每一步操作都成功 set @error1=@@error
    2、一般是判断@error1 <>0 则ROLLBACK TRANSACTION 事务名(回滚事务。 因为一般有多个,所以用 or )
      

  2.   

    通过@@error 来判断通过set xact abort on来设置是否自动回滚
      

  3.   


    BEGIN   TRAN     @@TRANCOUNT+1   
     COMMIT   TRAN   @@TRANCOUNT-1   
     ROLLBACK   TRAN   使@@TRANCOUNT回归0   
     SAVE   TRAN   不影响@@TRANCOUNT
    举例   
      1)   SELECT   '事务处理前',   @@TRANCOUNT             --值为   0   
      BEGIN   TRAN   
          SELECT   '第一个事务',   @@TRANCOUNT         --值为   1   
              SELECT   *   FROM   table1   
              BEGIN   TRAN     
                    SELECT   '第二个事务',   @@TRANCOUNT     --值为   2   
                        DELETE   table1   
              COMMIT   TRAN   
              SELECT   '递交第二个事务',   @@TRANCOUNT   --值为   1   
      ROLLBACK   TRAN   
      SELECT   '回滚第一个事务',   @@TRANCOUNT   --值为   0   
        
      2)   SELECT   '事务处理前',   @@TRANCOUNT             --值为   0   
      BEGIN   TRAN     
          SELECT   '第一个事务',   @@TRANCOUNT         --值为   1   
              SELECT   *   FROM   table1   
          SAVE   TRAN   t1   
          SELECT   '保存第一个事务后',   @@TRANCOUNT   --值为   1     
              BEGIN   TRAN     
                    SELECT   '第二个事务',   @@TRANCOUNT     --值为   2   
                        DELETE   table1   
            ROLLBACK   TRAN   t1   
              SELECT   '回滚到保存点t1',   @@TRANCOUNT   --注意这里的值为   2     
      IF   @@TRANCOUNT>0   
      ROLLBACK   TRAN   
      SELECT   '处理结束',   @@TRANCOUNT   --为   0 
    可以参考下这段代码