升级MSSQL Server至2019后Django应用数据库调用报错求助
解决SQL Server 2019升级后Django应用REGEXP_LIKE找不到的问题
问题原因
SQL Server 2008本身没有内置REGEXP_LIKE函数,你的应用之前能正常运行,应该是在2008实例中自定义了dbo.REGEXP_LIKE函数。升级到2019后,SQL Server内置了REGEXP_LIKE,但它是全局内置函数,不需要加dbo.前缀;同时如果旧的自定义函数没有迁移到新实例,就会触发找不到对象的错误。
解决方案
检查并迁移自定义函数
登录SQL Server 2019实例,执行以下查询确认是否存在dbo.REGEXP_LIKE:SELECT * FROM sys.objects WHERE name = 'REGEXP_LIKE' AND type = 'FN'如果查询无结果,从SQL Server 2008实例中导出该自定义函数的创建脚本,在2019实例中执行创建。
调整Django查询中的函数调用
如果你的代码是手动编写的SQL语句,把dbo.REGEXP_LIKE改为REGEXP_LIKE(去掉前缀);如果是使用Django ORM的__regex查询,确保安装的SQL Server后端是最新版(比如django-mssql-backend),它会自动适配SQL Server 2019的内置函数语法。确认ODBC驱动兼容性
确保使用的ODBC Driver 17 for SQL Server是最新版本,避免因驱动版本过低导致的语法解析问题。
内容的提问来源于stack exchange,提问作者Mehdi Sheikh
相关产品推荐
相关产品推荐

