强制回滚到整个脚本(包括存储过程)

Force rollback to entire script (stored procedure included)

我有一个包含许多存储过程的复杂脚本,我需要在所有情况下进行回滚。

    BEGIN TRANSACTION;  
    
    INSERT INTO Table1 VALUES(1);  
    INSERT INTO Table2 VALUES(2);  
    
    EXEC storedprocedure1
    
    EXEC storedprocedure2
    
    ....
    
    ROLLBACK; 

我没有检查里面的所有存储过程(是否有其他事务)。

我问是否有一种方法可以通过存储过程中存在其他事务来独立回滚整个脚本(包括存储过程)。

谢谢!

(假设 SQL 服务器)

不需要检查那些存储过程。

ROLLBACK 将一直回滚到最外层的事务,包括回滚 storedprocedure1storedprocedure2 内的所有事务,即使那些嵌套事务是在其中提交的那些程序。

选择 @@TRANCOUNT 将向您显示任何 ROLLBACK 都会将会话的交易计数设置回 0。

因此,如果您回滚外部事务,那么可能期望那些嵌套事务提交的人是 going to be disappointed