Какая рекомендуемая конфигурация в отношении настроек, связанных с ANSI? - PullRequest
4 голосов
/ 10 февраля 2011

Я видел много вопросов относительно настроек, связанных с ANSI, и прочитайте некоторые документы, в которых указаны некоторые функции (например, индексы для вычисляемых столбцы и индексированные представления) могут стать бесполезными в зависимости от Настройки ANSI включены или выключены ... Итак, какие рекомендуемые значения для тех:

  • ANSI_Padding
  • ANSI_NULLS
  • ANSI_WARNINGS
  • Concat_NULL_YELDS_NULL
  • QUOTED_IDENTIFIER
  • ARITHABORT
  • NUMERIC_ROUNDABORT

Я хотел бы получить указания относительно них.

1 Ответ

4 голосов
/ 12 февраля 2011

Для индексированных представлений и индексированных или постоянных вычисляемых столбцов предписано следующее 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 параметр ANSI_WARNINGS - ON неявно устанавливает *От 1009 * до ON, если уровень совместимости базы данных не установлен равным 80 или более ранним (когда его необходимо установить явно).

Несмотря на это, имеет смысл быть последовательным в настройке 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 иДля операторов изменения данных XQuery и XML требуется, чтобы QUOTED_IDENTIFIER было ON.

...