我见过很多关于ANSI相关设置的问题, 并阅读一些陈述某些特征的文档(比如计算的索引) 列和索引视图)可能会变得毫无价值取决于 打开或关闭ANSI设置...... 那么,那些推荐值是什么:
我想了解相关指南。
答案 0 :(得分:4)
对于索引视图和索引或持久计算列,以下SET OPTIONS
are all prescribed
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
隐式将ARITHABORT
设置为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
。