SQL Server 2017部分数据库无法使用OPENJSON函数问题咨询
问题分析与解决
核心说明:SQL Server JSON函数无需单独启用,报错通常由以下场景导致
数据库兼容性级别过低
JSON函数(包括OPENJSON)是SQL Server 2016及以上版本的特性,要求数据库兼容性级别至少为130(对应SQL Server 2016)。若报错数据库的兼容性级别低于130,就会触发"Invalid object name"错误。
检查兼容性级别:SELECT name, compatibility_level FROM sys.databases WHERE name = '目标数据库名';修改兼容性级别(需数据库管理员权限):
ALTER DATABASE 目标数据库名 SET COMPATIBILITY_LEVEL = 130; -- 也可设为140,对应SQL Server 2017原生级别未指定系统架构调用函数
OPENJSON属于sys系统架构,如果当前用户的默认架构不是sys,且调用时未明确指定sys.OPENJSON,会因架构查找顺序问题找不到对象。
先尝试显式指定架构调用验证:SELECT * FROM sys.OPENJSON('{"key":"value"}');若验证通过,可检查用户默认架构:
SELECT name, default_schema_name FROM sys.database_principals WHERE name = CURRENT_USER;权限被限制
极少数情况下,public角色对sys.OPENJSON的执行权限被移除,导致普通用户无法调用。可检查权限状态:SELECT permission_name FROM sys.database_permissions dp JOIN sys.database_principals dpri ON dp.grantee_principal_id = dpri.principal_id JOIN sys.objects o ON dp.major_id = o.object_id WHERE o.name = 'OPENJSON' AND dpri.name = 'public';若缺少权限,可重新赋予:
GRANT EXECUTE ON OBJECT::sys.OPENJSON TO public;
内容的提问来源于stack exchange,提问作者user1707389
相关产品推荐
相关产品推荐

