SQL-事务

2022-01-20  本文已影响0人  YANG_LIVE
IF EXISTS ( SELECT TOP ( 1 ) * FROM #Tpmet )
    BEGIN
        BEGIN TRANSACTION;      -- 开启事务
        DECLARE @ErrorNo INT;   -- 定义变量,用于记录事务执行过程中的错误次数
        SET @ErrorNo = 0;
        BEGIN TRY

            /*
            业务逻辑 
            @@ERROR 是错误信息标记
            */
            
            SET @ErrorNo = @ErrorNo + @@ERROR;
            IF ( @ErrorNo > 0 )
                BEGIN
                --抛出自定义的异常,在最后的catch块中统一处理异常
                    RAISERROR(233333,16,3);
                END;
        END TRY

        BEGIN CATCH
            SELECT  ERROR_NUMBER() errorNumber ,        --错误代码
                    ERROR_SEVERITY() errorSeverity ,    --错误严重级别,级别小于10 try catch 捕获不到
                    ERROR_STATE() errorState ,          --错误状态码
                    ERROR_PROCEDURE() errorProcedure ,  --出现错误的存储过程或触发器的名称
                    ERROR_LINE() errorLine ,            --发生错误的行号
                    ERROR_MESSAGE() errorMessage;       --错误的具体信息

            IF ( @@trancount > 0 )                      -- @@trancounz 系统全局变量,事务开启 @@trancount 值+1,判断事务是否开启
                BEGIN
                    ROLLBACK TRANSACTION;               -- 回滚事务
                END;
        END CATCH;

        IF ( @@trancount > 0 )
            BEGIN
                COMMIT TRANSACTION;        -- 提交事务
            END;    
    END;
上一篇 下一篇

猜你喜欢

热点阅读