2011-08-08 18 views
2

SET ANSI_WARNINGS OFFがあるストアドプロシージャで警告を取り除く場合、そのストアドプロシージャの影響のみを受け、他のストアドプロシージャの影響を受けません。つまり、ANSI_WARNINGSは依然ですに。 すべてのストアドプロシージャでオフにしたい場合はどうすればいいですか? なぜデフォルトになっていますか?どうすればそれを知ることができますか?の範囲SET ANSI_WARNINGS OFF

SQL Serverのその他の設定(例:NOCOUNT)は同じ方法で動作しますか?

ありがとうございます。

誰もが私とこれらの設定の共通の特性についての記事を共有できるなら、素晴らしいことでしょう。 BOLから

答えて

1

SQL Serverは、ANSI_WARNINGSデータベースオプションが含まれています。これは、SET ANSI_WARNINGSに相当する です。 SET ANSI_WARNINGSがONの場合、 エラーまたは警告が0で除算され、文字列が データベース列に対して大きすぎると、その他の同様のエラーが発生します。 SET ANSI_WARNINGSが OFFの場合、これらのエラーと警告は発生しません。 のデフォルト値は、SET ANSI_WARNINGSのモデルデータベースはOFFです。指定しない場合は、ANSI_WARNINGSの設定が適用されます( )。 SET ANSI_WARNINGSがOFFの場合、SQL サーバーは、 sys.databasesカタログビューのis_ansi_warnings_on列の値を使用します。

あなたはBOLでそれについて(Management StudioのF1)を読むことができるか、MSDNにhttp://msdn.microsoft.com/en-us/library/ms190368.aspx

NOCOUNTは同じように動作します。

3

それだけではなく、それは他のストアドプロシージャに影響しないことをポイントアウトおそらく価値がある、それだけで、例えばSET操作

を次のステートメントに影響を与えますこれを実行すると、オプションがオフになってから再びオフになることがわかります。

CREATE TABLE test 
(
    intvalue int NULL 
) 
INSERT INTO test VALUES (1) 
INSERT INTO test VALUES (NULL) 
SET ANSI_WARNINGS OFF 
SELECT COUNT(intvalue) FROM test 
-- (1 row(s) affected) 
SET ANSI_WARNINGS ON 
SELECT COUNT(intvalue) FROM test 
-- (1 row(s) affected) 
-- Warning: Null value is eliminated by an aggregate or other SET operation. 
SET ANSI_WARNINGS OFF 
SELECT COUNT(intvalue) FROM test 
-- (1 row(s) affected) 
DROP TABLE test 
関連する問題