説明/参照:
Explanation:
INSERT INTO文でX_ABORTをONにして、エラーが発生したときにトランザクションをロールバックすると、IF XACT_STATE()<> O ROLLBACK TRANSACTION文でROLLBACKすることができなくなります。
注:トランザクションはINSERT INTO .. VALUEステートメントに対して正しく定義されています。トランザクションにエラーがある場合は、トランザクションがロールバックされて最終的にエラー51000が発生します。
注:SET XACT_ABORTがONの場合、Transact-SQLステートメントで実行時エラーが発生すると、トランザクション全体が終了してロールバックされます。
XACT_STATEは、現在実行中の要求のユーザー・トランザクション状態を報告するスカラー関数です。
XACT_STATEは、要求にアクティブなユーザー・トランザクションがあるかどうか、およびトランザクションがコミットできるかどうかを示します。
XACT_STATEの状態は次のとおりです。
0現在の要求に対するアクティブなユーザートランザクションはありません。

1現在の要求にアクティブなユーザートランザクションがあります。この要求は、

データの書き込みとトランザクションのコミットを行います。
2現在の要求にアクティブなユーザー・トランザクションがありますが、エラーが発生しています。

コミットできない取引として分類されるべきである。
参考文献:
https://msdn.microsoft.com/en-us/library/ms188792.aspx
https://msdn.microsoft.com/en-us/library/ms189797.aspx