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

问题描述 投票:0回答:1

我看到很多关于 ANSI 相关设置的问题, 并阅读一些说明某些功能的文档(例如计算的索引 列和索引视图)可能变得毫无价值,具体取决于 ANSI 设置打开或关闭... 那么,这些的推荐值是什么:

  • ANSI_填充
  • ANSI_NULLS
  • ANSI_WARNINGS
  • Concat_NULL_YELDS_NULL
  • QUOTED_IDENTIFIER
  • 亚莉莎伯特
  • NUMERIC_ROUNDABORT

我想要关于这些的指南。

sql-server sql-server-2005 settings ansi-sql
1个回答
5
投票

对于索引视图和索引或持久计算列,以下

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
ANSI_NULLS
和 XQuery 和 XML 数据修改语句也要求
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
    

© www.soinside.com 2019 - 2024. All rights reserved.