4

ANSI 関連の設定に関する多くの質問を見て、いくつかの機能 (計算列のインデックスやインデックス付きビューなど) が ANSI 設定のオンまたはオフに応じて価値がなくなる可能性があることを述べているドキュメントを読みました...それらの:

  • ANSI_パディング
  • ANSI_NULLS
  • ANSI_WARNINGS
  • Concat_NULL_YELDS_NULL
  • QUOTED_IDENTIFIER
  • アリタボート
  • NUMERIC_ROUNDABORT

それらについてのガイドラインをお願いします。

4

1 に答える 1

5

インデックス付きビューおよびインデックス付きまたは永続化された計算列については、次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に設定されます。ARITHABORTON

それにもかかわらず、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_PADDINGANSI_NULLSCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIERON

于 2011-02-12T12:03:23.063 に答える