关于ANSI相关设置的推荐配置是什么?

时间:2011-02-10 17:14:34

标签: sql-server sql-server-2005 settings ansi

我见过很多关于ANSI相关设置的问题, 并阅读一些陈述某些特征的文档(比如计算的索引) 列和索引视图)可能会变得毫无价值取决于 打开或关闭ANSI设置...... 那么,那些推荐值是什么:

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

我想了解相关指南。

1 个答案:

答案 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_PADDINGANSI_NULLSCONCAT_NULL_YIELDS_NULL以及XQuery和XML数据修改语句的要求QUOTED_IDENTIFIERON