• XACT_STATE has 3 possible values.

    0 = there is no transaction

    1 = Transaction can be committed

    -1 = Transaction should be rolled back.

    So, if your try-catch block needs to maintain TRANSACTIONs then your CATCH block should check for (XACT_STATE()) = -1 rolling back your transaction. You can start checking the condition (XACT_STATE()) 0 in your CATCH block.