我不清楚是否需要为我使用的每个 SP 使用不同的保存点名称SAVE TRANSACTION
。
我可以一直使用例如SAVE TRANSACTION ProcedureSavePoint
,ROLLBACK TRANSACTION ProcedureSavePoint
即使更高级别的事务使用相同的保存点名称?
我的 SP(s) 签名如下:
ALTER PROCEDURE [dbo].[usp_MyTask]()
AS
BEGIN
DECLARE @iReturn int = 0
DECLARE @tranCount int = @@TRANCOUNT;
IF @tranCount > 0
SAVE TRANSACTION ProcSavePoint;
ELSE
BEGIN TRAN
...
IF <some condition>
BEGIN
@iReturn = 1
GOTO Undo
END
...
IF @tranCount = 0
COMMIT TRAN
RETURN
Undo:
IF @tranCount = 0 -- transaction started in procedure. Roll back complete transaction.
ROLLBACK TRAN;
ELSE
IF XACT_STATE() <> -1 ROLLBACK TRANSACTION ProcSavePoint;
RETURN @iReturn
END
希望我的问题很清楚。