我已经看到了很多关于 ANSI 相关设置的问题,并且阅读了一些文档,这些文档说明了某些特性(如计算列和索引视图上的索引)可能会因 ANSI 设置的开启或关闭而变得毫无价值......那么,推荐的值是什么那些:
- ANSI_Padding
- 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 中,设置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
,并且 XQuery 和 XML 数据修改语句需要这样做。ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
ON