2011-02-10 27 views
4

我见过关于ANSI相关设置, 看了一些文档是状态的一些功能(如在计算 列和索引视图索引)很多问题可以根据对 ANSI设置或关闭... 因此变得一文不值,什么这些推荐值:有关ANSI相关设置的建议配置是什么?

  • ANSI_PADDING
  • ANSI_NULLS
  • ANSI_WARNINGS
  • Concat_NULL_YELDS_NULL
  • QUOTED_IDENTIFIER
  • ARITHABORT
  • NUMERIC_ROUNDABORT

我想就这些准则。

+1

以下三个都应该是'ON`。 “OFF”设置已弃用。 `ANSI_Padding`,`ANSI_NULLS`,`Concat_NULL_YELDS_NULL`。对于索引视图,ANSI_WARNINGS应该是'ON'。 `ARITHABORT`对此没有任何影响,就像'ANSI_WARNINGS'在此优先(尽管避免计划缓存中的重复计划一致) – 2011-02-10 17:35:50

+1

Martin,这应该是一个答案,因此我可以对它进行升级或甚至选择它!!!!!! – 2011-02-10 17:38:02

回答

4

对于索引视图和索引或持久化计算列如下SET OPTIONSare 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_WARNINGSON隐式设置ARITHABORTON除非数据库兼容级别设置为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