You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:12:03