2017-04-03 177 views
3

私はSET XACT_ABORTコマンドの目的を理解する:のTransact-SQLステートメントが 実行時エラーが発生した場合、SET XACT_ABORTがONの場合SQL ServerはXACT_ABORTをデフォルトでOFFにしていますか?グローバルにONに設定できますか?

は、トランザクション全体が終了し、ロールバックされます。

SET XACT_ABORTがOFFの場合、エラーを発生させたTransact-SQL ステートメントのみがロールバックされ、トランザクション が処理を続行する場合があります。エラーの重大度に応じて、SET XACT_ABORTがオフであってもトランザクション全体がロールバックされることがあります( )。 デフォルト設定はOFFです。一般的に

、私は頻繁に維持するために推奨DBAやブログを聞くため、エラーが、1が誤りならば、トランザクション全体をロールバックしたいシナリオで劣勢ことになる場合は、1つのトランザクションの処理を続行したいと思うのシナリオSET XACT_ABORT ONを使用して、一貫性のないトランザクション結果への実行を回避します。テンプレートコードの一部としてSET XACT_ABORT ONのストアドプロシージャもすべて表示されています。

Quesions:OFFにそれをデフォルトにリードSQL Serverを持っているだろうか

  1. ユースケースのほとんどはONするXACT_ABORTが必要な場合は、? XACT_ABORTONがSQL Serverのトランザクション処理にオーバーヘッドを追加しましたか?

  2. SET XACT_ABORTコマンドは、現在のセッションにのみ影響します。私は、この画像に示すように、SSMS > Tools > Options > Query Execution > SQL Server > AdvancedからSET XACT_ABORT ONにSSMSをデフォルトにすることができることを知っています。 enter image description here しかし、これはSSMSを介して実行されているSQL文のみに限定され、アプリケーションコード/ SSISパッケージを通じて呼び出されるストアドプロシージャは役に立ちません。それらの手順のために、私はまだすべての手順でSET XACT_ABORT ONを繰り返す必要があります。どのような方法があります ONデータベースレベルで設定することはできますか?他の方法でをグローバルに設定でき、毎回それを心配する必要はありませんか?

+0

を、好きなときにいつでもアクティブな接続を介してSET XXX ONを/ OFF発行できるとオプションがに適用されますセッション全体 –

+0

[なぜSET XACT_ABORTはデフォルトの動作ではありませんか?](http://stackoverflow.com/questions/7956856/why-isnt-set-xact-abort-on-the-default-behavior) –

答えて

3

コマンドは少しあいまいですがあなたは、サーバーレベルでグローバルなデフォルトの接続設定としてXACT_ABORT ONを設定することができます。

EXEC sys.sp_configure N'user options', N'16384' 
GO 
RECONFIGURE WITH OVERRIDE 
GO 

は詳細についてはhereを参照してください。

オプションもSSMSを介して設定することができますが、エクスプローラ]> [サーバーのプロパティ]> [接続]オブジェクト:

enter image description here

関連する問題