您的位置:首页 > 数据库 > SQL语言 > 正文

SQL SERVER存储过程中使用事务与try catch

更多 时间:2016-5-3 类别:数据库 浏览量:1218

SQL SERVER存储过程中使用事务与try catch

SQL SERVER存储过程中使用事务与try catch

一、格式类似于

 

  •  
  • SQL 代码   复制
  • 
    CREATE PROCEDURE YourProcedure    
    AS
    BEGIN
        SET NOCOUNT ON;
    
        BEGIN TRY---------------------开始捕捉异常
           BEIN TRAN------------------开始事务
            UPDATE A SET A.names = B.names FROM 表1 AS A INNER JOIN 表2 AS B ON A.id = B.id
    
            UPDATE A SET A.names = B.names FROM 表1 AS A INNER JOIN 表2 AS B ON A.TEST = B.TEST
    
        COMMIT TRAN -------提交事务
        END TRY-----------结束捕捉异常
        BEGIN CATCH------------有异常被捕获
            IF @@TRANCOUNT > 0---------------判断有没有事务
            BEGIN
                ROLLBACK TRAN----------回滚事务
            END 
            EXEC YourLogErrorProcedure-----------记录存储过程执行时的错误信息,自定义
        END CATCH--------结束异常处理
    END
    
    		
  •  

     

    二、捕获错误的常用函数

     

    1、ERROR_NUMBER()  返回错误号。

    2、ERROR_SEVERITY()  返回严重级别。

    3、ERROR_STATE()  返回错误状态号。

    4、ERROR_PROCEDURE()  返回出现错误的存储过程或触发器的名称。

    5、ERROR_LINE()  返回导致错误的行号。

    6、ERROR_MESSAGE()  返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。

     

     

     

    三、实例

     

  •  
  • SQL 代码   复制
  • 
    ALTER PROC usp_AccountTransaction  
      
        @AccountNum INT,  
      
        @Amount DECIMAL  
      
    AS  
      
    BEGIN  
      
        BEGIN TRY --Start the Try Block..  
      
            BEGIN TRANSACTION -- Start the transaction..  
      
                UPDATE MyChecking SET Amount = Amount - @Amount  
      
                    WHERE AccountNum = @AccountNum  
      
                UPDATE MySavings SET Amount = Amount + @Amount  
      
                    WHERE AccountNum = @AccountNum  
      
            COMMIT TRAN -- Transaction Success!  
      
        END TRY  
      
        BEGIN CATCH  
      
            IF @@TRANCOUNT > 0  
                BEGIN
                ROLLBACK TRAN --RollBack in case of Error  
                END 
                EXEC YourLogErrorProcedure-----------记录存储过程执行时的错误信息,自定义
        END CATCH  
    END  
      
    GO  
    
    		
  •  

    标签:存储过程