XACT_STATE zatwierdzenie transakcji w bloku catch

0

https://docs.microsoft.com/en-us/sql/t-sql/functions/xact-state-transact-sql?view=sql-server-ver15

Patrzę na poniższy przykład i nie potrafię sobie wyobrazić scenariusza dla którego należałoby commitować coś w bloku catch
Stosuję mniej poniższy schamt w swoich procedurach ale commita umieszczałem tylko tuż przed końcem try.
Czy macie jakiś pomysł na commit w catchu?
Jak poleci wyjątek z bazy to i tak XACT_STATE zwróci -1

USE AdventureWorks2012;  
GO  
  
-- SET XACT_ABORT ON will render the transaction uncommittable  
-- when the constraint violation occurs.  
SET XACT_ABORT ON;  
  
BEGIN TRY  
    BEGIN TRANSACTION;  
        -- A FOREIGN KEY constraint exists on this table. This   
        -- statement will generate a constraint violation error.  
        DELETE FROM Production.Product  
            WHERE ProductID = 980;  
  
    -- If the delete operation succeeds, commit the transaction. The CATCH  
    -- block will not execute.  
    COMMIT TRANSACTION;  
END TRY  
BEGIN CATCH  
    -- Test XACT_STATE for 0, 1, or -1.  
    -- If 1, the transaction is committable.  
    -- If -1, the transaction is uncommittable and should   
    --     be rolled back.  
    -- XACT_STATE = 0 means there is no transaction and  
    --     a commit or rollback operation would generate an error.  
  
    -- Test whether the transaction is uncommittable.  
    IF (XACT_STATE()) = -1  
    BEGIN  
        PRINT 'The transaction is in an uncommittable state.' +  
              ' Rolling back transaction.'  
        ROLLBACK TRANSACTION;  
    END;  
  
    -- Test whether the transaction is active and valid.  
    IF (XACT_STATE()) = 1  
    BEGIN  
        PRINT 'The transaction is committable.' +   
              ' Committing transaction.'  
        COMMIT TRANSACTION;     
    END;  
END CATCH;  
GO  
0

Jak ja to rozumiem: może wystąpić błąd, który powoduje, że transakcję można zakomitować. W podanym przypadku raczej tak nie będzie, ale ogólnie miedzy delete a Commitem w bloku try mogą być inne rzeczy, które spowodują wyjątek i wejście do bloku Catch. Trochę nie ma sensu dla mnie kominotwąć jak wystąpił jakiś błąd, ale to tylko przykład i tak należy na niego patrzeć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1