我看到了类似的问题,但没有人能帮我解决我的问题. 所以,问题是这样的: 我有以下声明:
BEGIN TRANSACTION
print @@TRANCOUNT
EXECUTE proc1
print @@TRANCOUNT
COMMIT TRANSACTION
CREATE PROCEDURE proc1 AS
BEGIN
SET XACT_ABORT ON
SAVE TRANSACTION TillOuterMost;
BEGIN TRANSACTION
print @@TRANCOUNT
ROLLBACK TRANSACTION TillOuterMost;
END
GO
运行此命令时,我遇到错误:
1
2
Msg 266, Level 16, State 2, Procedure proc1, Line 0 [Batch Start Line 12]
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 2.
2
这意味着ROLLBACK TRANSACTION TillOuterMost;
语句没有减少事务计数.后来,我try 只删除已保存的标签和刚使用的ROLLBACK事务.但这会同时回滚内部和外部事务,并给出以下错误:
1
2
Msg 266, Level 16, State 2, Procedure proc1, Line 0 [Batch Start Line 11]
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.
0
Msg 3902, Level 16, State 1, Line 18
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
请注意,在后一种情况下,事务计数已递减到0.
我也试过这个变种,它也没有帮助:
CREATE PROCEDURE proc1 AS
BEGIN
SET XACT_ABORT ON
SAVE TRANSACTION OO
BEGIN TRANSACTION
print @@TRANCOUNT
ROLLBACK TRAN OO;
END
GO
BEGIN TRANSACTION AA
print @@TRANCOUNT
EXECUTE proc1
if @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION AA;
END
ELSE
BEGIN
COMMIT TRANSACTION AA
END
仍收到错误:
1
2
Msg 266, Level 16, State 2, Procedure proc1, Line 0 [Batch Start Line 12]
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 2.
你知道如何解决这个问题吗?