SQL Serverの 2005 新たにロールバックSQL Serverでのトランザクションを固定する方法をintoduced 2005
XACT_ABORTをONにセット
XACT_ABORTがオンの場合. T - SQLステートメントは、自動的にトランザクションをロールバックエラーが文で発生したれます.
XACT_ABORTをONにセット
EMPを使用して、
トランを始める
EMPINFO値に挿入します。(1)
EMPINFO値に挿入します。(1) — この文は、主キーエラーが発生します
EMPINFO値に挿入します。(2)
COMMIT TRAN
文の最初の行は、エラーなしで実行されます. 主キーのエラーが2行目に発生します. しかし、ブロック全体のトランザクションはコミットされませんので、上のXACT_ABORT.
あなたはXACT_ABORTが現在*バッチ*を終了することに注意してください, 全体ではなく、コマンド. バッチがGOキーワードで区切られています. 実行は、次のバッチの開始時に継続します.
この機能は、SQL Serverにもあります 2000, それは様々なエラーのため、少々異なって動作がも.
SQLの 2000, XACT_ABORTが自動的にトランザクションをロールバックに失敗する場合があります.
インスタンスのための:
無効な列名への挿入.
IDENTITY_INSERT OFFと主キーへの挿入.
存在しないUDFを使用するSELECTの実行.
この種のエラーは通常不完全に書かれたコマンドが原因です。, 誰かがスキーマを変更しない限り、そう、彼らはあなたのプログラムの日々の操作では発生しませんので、. オーサリングのデータベース更新スクリプトは、プロジェクトの新しいバージョンをデプロイするときに時が、私は彼らの可能性を考慮, 念の展開で計画どおり行かない.
これらのエラーを処理する方法があります。. あなたのCOMMITは、DML文を実行するバッチにする必要があります. バッチの後に (GOキーワードの後に) あなたはそれがゼロより大きいよいかどうかを確認し、それに従って行動すること@ @ TRANCOUNTを確認することができます. 通常ROLLBACKトランザクションを.
トランザクションは、バッチにまたがることができます, ので、後続のバッチでロールバックを実行することができます.