使用openjson创建存储过程时出错

xv8emn3q  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(358)

我的问题如下:我使用sql server 2017 express,我有一个类型为 json 以前格式化过,它在普通查询中正常运行。
但是当我创建存储过程时,我得到了一个错误,我真的不知道如何解决它。如果有人能帮我摆脱困境,我将不胜感激。
这是普通查询中的代码

DECLARE @json NVARCHAR(MAX)
SET @json =   
  '
  {
    "varios":[{
    "name":"David",
    "cant":"291123",
     "number":"205893"
        },
        {
    "name":"pedro",
    "cant":"295523",
     "number":"206693"
        },
            {
    "name":"maria",
    "cant":"295523",
     "number":"206693"
        }
    ]
    }
' 
SELECT * 
FROM OPENJSON (@json, '$.varios' )  
     WITH (   
              name varchar(200) '$.name' ,  
              cant    int     '$.cant',  
              number int '$.number' 
          ) ;

这将返回以下结果:

Name         cant       number
------------------------------
David       291123      205893
pedro       295523      206693
maria       295523      206693

但当我尝试在这样的存储过程中执行相同的操作时:

CREATE PROCEDURE sp_pro
    @json NVARCHAR(max)
AS
BEGIN
    SET @json =   
  '
  {
    "varios":[{
    "name":"David",
    "cant":"291123",
     "number":"205893"
        },
        {
    "name":"pedro",
    "cant":"295523",
     "number":"206693"
        },
            {
    "name":"maria",
    "cant":"295523",
     "number":"206693"
        }
    ]
    }
' 
    SELECT * 
    FROM OPENJSON(@json, '$.varios' )  
    WITH (
            nombre varchar(50) '$.name',  
            cantidad int '$.cant',  
            numero int '$.number' 
         );
END

我无法解决以下错误:
消息102,级别15,状态1,程序sp\u prueba2,第29行[批处理开始行0]
sintaxis incorrecta cerca de'$.name'。
如果有人知道如何解决这个问题,或者我遗漏了什么步骤,我将不胜感激

dgiusagp

dgiusagp1#

openjson函数仅在兼容级别130或更高的情况下可用。如果您的数据库兼容级别低于130,那么SQLServer将无法找到并运行openjson函数。其他json函数在所有兼容级别都可用。
您可以在sys.databases视图或数据库属性中检查兼容性级别。可以使用以下命令更改数据库的兼容级别:

ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 130

即使在新的azure sql数据库中,兼容级别120也可能是默认值。

相关问题