Por que, quando estou SAVE TRAN SavePoint
no local (A), recebo esses erros na terceira instância de cair no CATCH e além...
"Msg 6401, Nível 16, Estado 1... Não é possível reverter o SavePoint. Nenhuma transação ou ponto de salvamento com esse nome foi encontrado."
...mas não recebo esses erros quando SAVE TRAN SavePoint;
estou no local (B)?
Só posso imaginar que tenha algo a ver com o contexto do loop do cursor, mas não entendo por quê.
-- Premable stuff, opening cursor, etc. here...
BEGIN TRAN
SAVE TRAN SavePoint; -- (A)
WHILE @@FETCH_STATUS = 0
BEGIN;
-- SAVE TRAN SavePoint; -- (B)
BEGIN TRY
-- UPDATE statement here which may fail
SAVE TRAN SavePoint;
END TRY
BEGIN CATCH
ROLLBACK TRAN SavePoint;
END CATCH;
FETCH NEXT FROM Cursor INTO @X, @Y, @Z;
END;
-- CLOSE & DEALLOCATE stuff here
IF @DryRun = 1
ROLLBACK TRAN;
ELSE
COMMIT TRAN;