1.5 兼容级别
兼容级别用于将某些数据库的行为设置为与指定的 SQL Server 早期版本兼容。
1.5.1 兼容级别列表
为了使数据库与 SQL Server 的早期产品保持部分向后兼容,可以为数据库指定兼容级别。兼容级别只影响指定的数据库的行为,而不会影响整个实例的行为 。
对于 SQL Server 2014 安装,默认的兼容级别是120。
下表列出了常见的兼容级别。
产品名称 | 版本号 | 默认兼容级别 | 最低兼容级别 |
SQL Server 7.0 | 7.0 | 70 | |
SQL Server 2000 | 8.0 | 80 | |
SQL Server 2005 | 9.0 | 90 | 70 |
SQL Server 2008 | 10.0 | 100 | 80 |
SQL Server 2008 R2 | 10.50 | 100 | 80 |
SQL Server 2012 | 11.0 | 110 | 90 |
SQL Server 2014 | 12.0 | 120 | 90 |
1.5.2 新增的保留关键字
SQL Server 新产品总是会引入一些新的关键字。一旦引入,这些关键字便会保持为保留关键字。例如,在兼容级别 90 中引入的保留关键字 PIVOT 在级别 100 和 110 中也被保留。
如果某一应用程序使用对其保留级别而言是关键字的标识符,则该应用程序将失败。若要解决这一问题,请用方括号([ ])或引号(" ")括起该标识符;例如,若要将使用标识符 EXTERNAL 的应用程序升级为兼容级别90,可以将该标识符更改为 [EXTERNAL] 或 "EXTERNAL"。
◆ SQL Server 2005 引入的关键字有:EXTERNAL、PIVOT、UNPIVOT、REVERT、TABLESAMPLE。
◆ SQL Server 2008 引入的关键字有:CUBE、MERGE、ROOLUP。
◆ SQL Server 2012 引入的关键字有:WITH GROUP、TRY_CONVERT、SEMANTICKEYPHRASETA BLE、SEMANTICSIMILARITYDETAILSTABLE、SEMANTICSIMILARITYTABLE。
1.5.3 兼容级别之间的差异
每个兼容级别都会引入一些的变化。例如:
◆ 使用兼容级别 90 时,不支持外部联接运算符 *= 和 =*,应使用 OUTER JOIN 关键字。varchar 和char 的联合返回 varchar。对于以 nvarchar 作为参数的内置函数,即使所提供的值为 varchar,该值仍将转换为 nvarchar(4000)。但如果传递较大值,SQL Server 2005 将生成错误。而在更低的兼容级别中,较大值将自行截断。
◆ 使用兼容级别100时,OUTPUT 子句中不允许使用全文谓词。日期时间内部函数(如 DATEPART)需要字符串输入值,才能成为有效的日期时间文字。在使用无效的日期时间文字时,例如SELECT DATEPART (year, '2007/05-30') 会返回错误。
◆ 使用兼容级别110时,在递归公用表表达式 (CTE) 查询中不允许 PIVOT。不能使用 RC4 或 RC4_128 加密新材料。对 time 和 datetime2 数据类型的 CAST 和 CONVERT 操作的默认样式始终为 121。
兼容级别 120 引入的一些新行为如下所示 :
◆ SQL Server 2014 包括了对创建和优化查询计划的组件的显著改进。这个新的查询优化器功能依赖于使用数据库兼容性级别 120。 若要利用这些改进,应使用数据库兼容性级别 120 开发新的数据库应用程序。应对从较早版本的 SQL Server 中迁移的应用程序进行仔细测试,以便确认保持或改进了好的性能。如果性能下降,可以将数据库兼容性级别设置为 110 或更低,以便使用较早的查询优化器方法。
◆ 将 date 值转换为字符串值时,不忽略语言设置。
◆ EXCEPT 子句中的递归引用产生遵从 ANSI SQL 标准的错误。而在较低的兼容级别时,EXCEPT 子句右侧的递归引用产生无限循环。
◆ 递归 CTE 不允许列名重复。
◆ 更改触发器不更改触发器的状态(已启用或已禁用)。
◆ 将 IDENTITY_INSERT 设置为 OFF 后,不能为表中的标识列插入显式值。
◆ MERGE 语句的 $action 子句返回的值的排序规则是数据库排序规则而非服务器排序规则,因此不会返回排序规则冲突错误。
◆ SELECT INTO 语句可创建并行插入操作。插入大量行时,并行操作可提高性能。
1.5.4 升级建议
一般只有最后两个版本的兼容级别可以直接升级。例如,可以将 SQL Server 2008(兼容级别为100)的数据库直接升级到 SQL Server 2014(兼容级别为120)。
不推荐直接将 SQL Server 2005(兼容级别为90)的数据库升级到 SQL Server 2014。如果直接升级,升级过程中兼容级别将从 90 更新为 100。
本文出自 “SQL Server 管理员指南” 博客,谢绝转载!