SQL Server 2025 CTP2.0中使用REGEXP_LIKE函数报“未识别内置函数”错误求助
我完全懂你现在的困惑——明明SSMS的智能提示都能认出REGEXP_LIKE函数,结果实际执行SQL的时候却报错说它不是内置函数,尤其是你已经特意用上了SQL Server 2025 CTP2.0的Docker镜像,按照教程来操作却碰壁,确实挺闹心的。
咱们一步步来排查解决这个问题:
1. 先确认当前数据库的兼容级别
新的内置函数通常要求数据库使用对应版本的兼容级别,SQL Server 2025的默认兼容级别是170。如果你的数据库还是沿用了旧版本的兼容级别(比如160对应SQL Server 2022),新函数可能无法被识别。
你可以先执行以下SQL查看当前数据库的兼容级别:
SELECT name, compatibility_level FROM sys.databases WHERE name = '你正在使用的数据库名';
如果返回的compatibility_level不是170,就执行下面的语句修改:
ALTER DATABASE 你正在使用的数据库名 SET COMPATIBILITY_LEVEL = 170;
2. 确认你连接的实例确实是2025 CTP2.0
有时候我们可能会在SSMS里同时连接多个SQL Server实例,一不小心就切到了旧版本的实例上。你可以再执行一次:
SELECT @@VERSION;
仔细核对返回的版本信息,确保确实是Microsoft SQL Server 2025 (CTP2.0) - 17.0.700.9这个Docker实例,而不是本地安装的其他版本。
3. 检查CTP2.0是否真的包含REGEXP_LIKE函数
虽然官方明确表示REGEXP_LIKE会加入SQL Server 2025,但CTP(社区技术预览版)是分阶段推送功能的——有些新功能可能要到后续的CTP版本(比如CTP3.0及以后)才会正式实装。
你可以去查一下SQL Server 2025 CTP2.0的官方发布说明,确认这个函数是否在该版本的功能清单里。如果官方说明里没提到这个函数,那大概率是CTP2.0还没上线这个功能,得等后续预览版。
4. 绕开约束,直接测试函数可用性
你可以先跳过CHECK约束,直接在查询窗口里调用函数试试:
SELECT REGEXP_LIKE('test@example.com', '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');
如果这个简单的查询也报错,那基本可以确定当前实例确实不支持这个函数;如果能正常返回结果,那可能是CHECK约束的语法有细微问题,但从你给出的代码来看,语法是没问题的。
另外补充一点:SSMS能识别函数是因为它的智能提示是基于预定义的函数列表(提前加入了2025的新函数),但实际执行是依赖于连接的SQL Server实例的功能支持,所以会出现“编辑器认得到,实例不支持”的情况,这是正常的版本不同步现象。
如果最后发现CTP2.0确实还没实装这个函数,你可以暂时用旧的方式实现校验(比如用LIKE表达式或者自定义函数,不过自定义函数在CHECK约束里有一定局限性),或者等后续的CTP版本推送。
内容来源于stack exchange

