1、各数据引擎兼容级别
查询当前数据库兼容级别语句:select name,cmptlevel from master.. sysdatabases
或者 SELECT name, compatibility_level FROM sys.databases;
查询数据库引擎版本 SELECT SERVERPROPERTY('ProductVersion');
2、注意事项
对于所有 SQL Server 安装,默认兼容性级别都与 数据库引擎 的版本相关联。 新数据库将设置为此级别,除非模型数据库的兼容性级别较低。 对于从 SQL Server 的任何早期版本附加或还原的数据库,如果数据库的兼容性级别是该 SQL Server 实例允许的最低级别,则将保留其现有的兼容性级别。 移动兼容性级别低于 数据库引擎 允许级别的数据库会自动将数据库设置为允许的最低兼容性级别。这既适用于系统数据库也适用于用户数据库。
以SQL Server 2017 为例:附加或还原数据库时以及就地升级后,SQL Server 2017 (14.x) 应出现以下行为:
(1)如果升级前用户数据库的兼容级别为 100 或更高,升级后将保持相应级别。
(2)如果升级前用户数据库的兼容级别为 90,则在升级后的数据库中,兼容级别将设置为 100,该级别为 SQL Server 2017 (14.x) 支持的最低兼容级别。
(3)在给定的 数据库引擎 版本中,tempdb、model、msdb 和 Resource 数据库的兼容性级别将设置为默认兼容性级别。
(4)master 系统数据库保留它在升级之前的兼容性级别。 这不会影响用户数据库行为。
对于在较低的兼容级别运行的预先存在的数据库,只要应用程序不需要使用仅在更高数据库兼容性级别中可用的增强功能,它就是维护之前的数据库兼容性级别的有效方法。 对于新的开发工作,或当现有应用程序需要使用新功能(如智能查询处理)以及一些新的 Transact-SQL 时,请计划将数据库兼容性级别升级到可用的最新级别
3、更改兼容级别
使用 ALTER DATABASE 更改数据库的兼容性级别。 当发出 USE <database> 命令或使用该数据库作为默认数据库上下文来处理新登录时,数据库的新兼容性级别设置会生效
ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 150 | 140 | 130 | 120 | 110 | 100 | 90 }
4、兼容性级别和数据库引擎升级
数据库兼容性级别是一个重要的工具,可通过允许升级 SQL Server 数据库引擎,同时通过维持相同的升级前数据库兼容性级别保持连接应用程序功能状态,从而帮助实现数据库现代化。 这意味着,可以从 SQL Server 的较旧版本(例如 SQL Server 2008)升级到 SQL Server 2019 (15.x) 或 Azure SQL 数据库(包括托管实例),而不需要更改应用程序(数据库连接除外);要将数据库引擎升级到最新版本,同时维持升级前的数据库兼容性级别及其可支持性状态,建议在数据库(存储过程、函数、触发器等可编程对象)和应用程序(使用捕获应用程序发送的动态代码的工作负荷跟踪)中,对应用程序代码执行静态函数外围应用验证 。可以使用 Microsoft 数据迁移助手 工具 (DMA) 轻松完成此操作。 将数据库从旧版本(例如 SQL Server 2008 R2 或 SQL Server 2012 (11.x))移到 SQL Server 或 Azure SQL 数据库的新版本时,此功能验证尤为重要,因为你的应用程序代码可能使用不受数据库兼容性级别保护的已弃用 Transact-SQL。 但从较新版本(如 SQL Server 2016 (13.x))迁移到 SQL Server 2019 (15.x) 或 Azure SQL 数据库时,则无需担心已弃用的 Transact-SQL。
只要应用程序不需要利用仅在更高数据库兼容性级别中可用的增强功能,它就是升级 SQL Server 数据库引擎 和维护之前的数据库兼容性级别的有效方法
5、使用兼容性级别实现后向兼容性
数据库兼容性级别设置提供与 SQL Server 早期版本的后向兼容性,在与 Transact-SQL 和查询优化行为相关的方面,后向兼容性仅适用于指定的数据库,而不是整个服务器。
参考:https://docs.microsoft.com/zh-cn/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-ver15