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

1現在の要求にはアクティブなユーザートランザクションがあります。要求は、次のようなあらゆるアクションを実行できます。

データの書き込みとトランザクションのコミット
2現在のリクエストにアクティブなユーザートランザクションがありますが、エラーが発生したため、

コミットできないトランザクションとして分類されるトランザクション。
参考文献:
https://msdn.microsoft.com/ja-jp/library/ms188792.aspx
https://msdn.microsoft.com/ja-jp/library/ms189797.aspx