Для индексированных представлений и индексированных или постоянных вычисляемых столбцов предписано следующее 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
.