如果你的存储过程或其他脚本出现下面这个错误,一般是因为ROLLBACK TRANSACTION在逻辑上缺少匹配的BEGIN TRANSACTION或者没有开始一个事务(也有可能此事务已经提交),但是你做了事务回滚操作(ROLLBACK TRANSACTION),否则就可能出现这种错误。

 

Msg 3903, Level 16, State 1, Line 22

The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

 

出现这种错误有很多种可能性,下面我们来通过一些案例来简单介绍一下这个错误,这些案例都是一些特殊案例的简化版本。

 

案例1:

 

CREATE PROCEDURE PRC_EXC
AS
BEGIN
    SELECT 1/0  --仅仅模拟存储过程出现异常。
END;
GO 
 
CREATE PROCEDURE PRC_TEST
AS
BEGIN
 
    BEGIN TRY
        BEGIN TRAN TT
 
            UPDATE dbo.TEST SET NAME='k3' WHERE object_id =9;
 
        COMMIT TRAN TT;
 
        EXEC dbo.PRC_EXC
 
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN TT;
    END CATCH
END

相关文章: