SQL Server 2017兼容级别130下TRIM等函数可正常运行?
解答
你对兼容级别与新增函数可用性的关联规则存在部分误解,该现象属于SQL Server的正常设计。
现象原因
- SQL Server的新增函数可用性优先由数据库引擎版本决定,兼容级别不是管控所有新函数的开关。只要实例引擎版本为SQL Server 2017及以上,原生就支持
TRIM、TRANSLATE这类全新命名的函数,即使数据库兼容级别设为130甚至更低,也可以正常调用。 - 兼容级别存在的核心作用是保证旧业务代码在升级数据库引擎后无需修改即可正常运行,仅会管控两类特性:一是和旧版本语法、执行行为存在冲突的特性,二是依赖新版查询优化器核心能力的特性,不会屏蔽和旧版本无任何冲突的新增功能。
同类需注意的特性
以下几类新增函数普遍不受兼容级别限制,只要引擎版本达标即可使用:
- 字符串处理类:
TRIM、TRANSLATE、CONCAT_WS、STRING_AGG(仅STRING_AGG的部分高阶扩展特性会受兼容级别约束,基础聚合功能无限制) - 日期时间处理类:
DATE_BUCKET、DATETRUNC - JSON处理类:
JSON_PATH_EXISTS、JSON_OBJECT、JSON_ARRAY - 其他无语法冲突的工具类函数、加密函数新增算法等
补充说明
仅当新增特性满足以下任一条件时,才会要求对应兼容级别支持:
- 特性语法和旧版本已有的语法规则存在冲突
- 特性依赖新版查询优化器的核心能力(比如智能查询处理全系列特性)
- 特性的返回结果、执行逻辑和旧版本同语法的行为存在不一致
内容的提问来源于stack exchange,提问作者Doug
相关产品推荐
相关产品推荐

