2

これは根本的に愚かかもしれませんが、ここに行きます:ARITHABORT、ARITHIGNORE - 私はそれらを元に戻す必要がありますか?

私はオーバーフローエラーを投げることなく実行する必要があるストアドプロシージャを持っています。オーバーフローの場合、私はNULLに満足しています。私はそれがすべてインターネットのまわりの提案を参照

(例えば。herehere)だけで結構です

SET ARITHABORT OFF; 
SET ARITHIGNORE ON; 

を使用するには、私は、のように、私のSPの最後に背面にそれらを有効にする必要がありますか?

SET ARITHABORT ON; 
SET ARITHIGNORE OFF; 

このようにしますか?これらもデフォルトですか?

また、(私の場合、 '606006000'をSMALLINTフィールドに入れようとすると)オーバーフローエラーを無視するには、両方のスイッチが必要ですか?

Azure DB v12を使用しています。

+0

必要はありません。 https://msdn.microsoft.com/en-us/library/ms190306.aspxでは、ログオンセッションで常にARITHABORTをONに設定する必要があります。「ログオンセッションでは常にARITHABORTをONに設定する必要があります。そのセッション固有のことを意味します。より良い説明:https://msdn.microsoft.com/en-us/library/ms190356.aspxセッションに影響を与えることに注意してください。次回のクエリの前にセッションを解放して新しいセッションを取得すると、セッションはリセットされます。自動的に – xQbert

+0

@ xQbertありがとう、第2のサイトは良い読書です。私はそれを受け入れる答えとしてこれを投稿してください。 – vacip

+1

@xQbert Yep、2番目のリンクから: "SETステートメントがストアドプロシージャまたはトリガで実行されている場合、SETオプションの値はストアドプロシージャまたはトリガからコントロールが返された後に復元されます。ありがとう、私のgoogle-fuは今日弱かった。 – vacip

答えて

1

これらの設定についての情報です。デフォルトでは両方ともtrueです。

のSET ARITHIGNORE:
SET ARITHIGNOREは、エラーメッセージが返されたか否かのみを制御する設定。 SQL Serverは、この設定

のSET ARITHABORTにかかわらず、オーバーフローまたはゼロ除算エラーを含む計算にNULLを返します。SET ARITHABORT設定は、クエリが終了したかどうかを決定するために使用することができる

さらに、これはMSDNは、これらのよりについて言いたいこと..です

この設定は、INSERT、UPDATEの間に発生したエラーに影響を与え、およびDELETE文はありません。 SET ARITHABORTまたはSET ARITHIGNOREがOFFで、SET ANSI_WARNINGSがONの場合、ゼロ除算またはオーバーフローエラーが発生した場合でもSQL Serverはエラーメッセージを返します。

これがスローされます私はいくつかのtestingsを行なったし、それがOFF設定が必要な行動のためだけで十分ですのSET ARITHIGNOREようです。..

さらに、あなたも同様SET_ANSI_WARNINGS_OFFを設定する必要があり、他の賢明エラー

SET ARITHABORT OFF 
--SET ARITHIGNORE OFF 
SET ANSI_WARNINGS OFF 

select 1/0 

declare @a tinyint 
set @a=10000 
select @a 
+1

徹底的な説明をありがとうございます。これは、なぜ私はそれが最後に働くことができなかったのかを説明します - 私はANSI_WARNINGSも必要でした。 – vacip

関連する問題