ANSI 関連の設定に関する多くの質問を見て、いくつかの機能 (計算列のインデックスやインデックス付きビューなど) が ANSI 設定のオンまたはオフに応じて価値がなくなる可能性があることを述べているドキュメントを読みました...それらの:
- ANSI_パディング
- ANSI_NULLS
- ANSI_WARNINGS
- Concat_NULL_YELDS_NULL
- QUOTED_IDENTIFIER
- アリタボート
- NUMERIC_ROUNDABORT
それらについてのガイドラインをお願いします。
ANSI 関連の設定に関する多くの質問を見て、いくつかの機能 (計算列のインデックスやインデックス付きビューなど) が ANSI 設定のオンまたはオフに応じて価値がなくなる可能性があることを述べているドキュメントを読みました...それらの:
それらについてのガイドラインをお願いします。
インデックス付きビューおよびインデックス付きまたは永続化された計算列については、次SET OPTIONS
のすべてが規定されています
SET options Required value
--------------------- -------------
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS* ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL ON
NUMERIC_ROUNDABORT OFF
QUOTED_IDENTIFIER ON
SQL Server 2005 では、データベース互換性レベルが 80 以前に設定されていない限り (明示的に設定する必要がある場合)、ANSI_WARNINGS
暗黙的にON
に設定されます。ARITHABORT
ON
それにもかかわらず、ARITHABORT
これはプラン キャッシュ キーとして使用され、不整合があると重複したプランが貴重なプラン キャッシュ スペースを浪費する可能性があるため、設定で一貫性を保つことは理にかなっています。これは、以下のクエリから確認できます。
SET ARITHABORT OFF
GO
SELECT * FROM master..spt_values WHERE number= -10 /*plan_cache_test*/
GO
SET ARITHABORT ON
GO
SELECT * FROM master..spt_values WHERE number= -10 /*plan_cache_test*/
GO
SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE attribute = 'set_options' AND text LIKE '%plan_cache_test%'
AND text NOT LIKE '%this_query%'
インデックス付きビュー/永続化された列の要件がなくても、次のオプションの設定はOFF
推奨されません。ANSI_PADDING
ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
ON