MSSQL中的数据库兼容性级别

0    148    1

Tags:

👉 本文共约25291个字,系统预计阅读时间或需96分钟。

简介

将 Transact-SQL 和查询处理行为设置为与指定的 SQL 引擎版本兼容。 有关其他 ALTER DATABASE 选项,请参阅 ALTER DATABASE

参数

database_name

要修改的数据库的名称。

COMPATIBILITY_LEVEL { 160 | 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }

要使数据库与之兼容的 SQL Server 版本。 可以配置以下兼容级别值(并非所有版本都支持所有以上列出的兼容级别):

展开表

Products数据库引擎版本默认兼容性级别标示支持的兼容级别值
Azure SQL 数据库16150160、150、140、130、120、110、100
Azure SQL 托管实例16150160、150、140、130、120、110、100
SQL Server 2022 (16.x)16160160、150、140、130、120、110、100
SQL Server 2019 (15.x)15150150、140、130、120、110、100
SQL Server 2017 (14.x)14140140、130、120、110、100
SQL Server 2016 (13.x)13130130、120、110、100
SQL Server 2014 (12.x)12120120、110、100
SQL Server 2012 (11.x)11110110、100、90
SQL Server 2008 R2 (10.50.x)10.5100100、90、80
SQL Server 2008 (10.0.x)10100100、90、80
SQL Server 2005 (9.x)99090、80
SQL Server 2000 (8.x)88080

重要

SQL Server 和 Azure SQL 数据库的数据库引擎版本号之间没有可比性,它们分别是这两项产品的内部版本号。 适用于 Azure SQL 数据库的数据库引擎与 SQL Server 数据库引擎基于相同的代码基础映像。 最重要的是,Azure SQL 数据库中的数据库引擎始终具有 SQL 数据库引擎的最新功能。 Azure SQL 数据库 的版本 12 高于 SQL Server 的版本 15。

备注

对于所有 SQL Server 安装,默认兼容性级别都与 数据库引擎 的版本相关联。 新数据库将设置为此级别,除非 model 数据库的兼容性级别较低。 对于从 SQL Server 的任何早期版本附加或还原的数据库,如果数据库的兼容性级别是该 SQL Server 实例允许的最低级别,则将保留其现有的兼容性级别。 移动兼容性级别低于 数据库引擎 允许级别的数据库会自动将数据库设置为允许的最低兼容性级别。 这既适用于系统数据库也适用于用户数据库。

附加或还原数据库时,以及就地升级后,SQL Server 2017(14.x)需要以下行为:

  • 如果升级前用户数据库的兼容级别为 100 或更高,升级后将保持相应级别。
  • 如果升级前用户数据库的兼容级别为 90,则在升级后的数据库中,兼容级别将设置为 100,该级别为 SQL Server 2017 (14.x) 支持的最低兼容级别。
  • 在给定的数据库引擎版本中,tempdbmodelmsdb 和 Resource 数据库的兼容性级别将设置为默认兼容性级别。
  • master 系统数据库保留它在升级之前的兼容级别。 这不会影响用户数据库行为。

对于在较低的兼容性级别运行的预先存在的数据库,只要应用程序不需要使用仅在更高数据库兼容性级别中可用的增强功能,它就是维护之前的数据库兼容性级别的有效方法。 对于新的开发工作,或当现有应用程序需要使用新功能(如智能查询处理)以及一些新的 Transact-SQL 时,请计划将数据库兼容性级别升级到可用的最新级别。 有关详细信息,请参阅兼容性级别和数据库引擎升级

备注

如果没有用户对象和依赖项,则升级到默认兼容性级别通常是安全的。 有关详细信息,请参阅建议 - master 数据库

使用 ALTER DATABASE 更改数据库的兼容性级别。 当发出 USE <database> 命令或使用该数据库作为默认数据库上下文来处理新登录时,数据库的新兼容性级别设置会生效。 若要查看数据库的当前兼容级别,请查询 sys.databases 目录视图中的 compatibility_level 列。

在早期版本 SQL Server 中创建并已升级到 SQL Server 2016 (13.x) RTM 或 Service Pack 1 的分发数据库采用兼容性级别 90,其他数据库不支持该级别。 这并不影响复制功能。 升级到更高版本的服务包和 SQL Server 版本将导致分发数据库的兼容性级别增加到可与 master 数据库匹配。

若要对整个数据库使用数据库兼容性级别 120 或更高级别,但选择启用映射到数据库兼容性级别 110 的 SQL Server 2012 (11.x)基数估计模型,请参阅 ALTER DATABASE SCOPED CONFIGURATION,尤其是它的关键字 LEGACY_CARDINALITY_ESTIMATION = ON

若要确定当前兼容级别,请查询 sys.databasescompatibility_level 列。

SQL

Azure SQL 备注

从 2019 年 11 月起,在 Azure SQL 数据库和 Azure SQL 托管实例中,新创建的数据库的默认兼容性级别。 Microsoft 不会更新现有数据库的数据库兼容性级别。 这是由客户自行决定的。 Microsoft 强烈建议客户计划升级到最新兼容性级别,以使用最新查询优化改进。

若要详细了解如何评估你最重要的查询在 Azure SQL 数据库 上的两个不同兼容性级别的性能差异,请参阅已改善 Azure SQL 数据库中兼容性级别 130 的查询性能。 本文介绍兼容性级别 130 和 SQL Server,但在 SQL Server 和 Azure SQL 数据库 中也可以使用相同的方法升级到 140 或更高级别。

若要确定连接到的数据库引擎版本,请执行以下查询。

SQL

Azure SQL 数据库上并不支持所有功能(因兼容级别而异)。

兼容性级别和数据库引擎升级

数据库兼容性级别是一个重要的工具,可通过允许升级 SQL Server 数据库引擎,同时通过维持相同的升级前数据库兼容性级别保持连接应用程序的功能状态相同,从而帮助实现数据库现代化。 这意味着,无需更改应用程序(数据库连接除外),即可从 SQL Server 的较旧版本(例如 SQL Server 2008 (10.0.x))升级到 SQL Server 或 Azure SQL 数据库(包括 Azure SQL 托管实例)。 有关详细信息,请参阅兼容性认证

只要应用程序不需要使用仅在更高数据库兼容性级别中可用的增强功能,它就是升级 SQL Server 数据库引擎和维护之前的数据库兼容性级别的有效方法。 有关使用兼容性级别实现后向兼容性的详细信息,请参阅兼容性认证

兼容性级别和存储过程

执行某一存储过程时,该存储过程将使用定义它的数据库的当前兼容性级别。 在更改某一数据库的兼容性设置时,该数据库的所有存储过程都将随之自动重新编写。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
MSSQL中的数据库兼容性级别后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部