我的问题如下:我使用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'。
如果有人知道如何解决这个问题,或者我遗漏了什么步骤,我将不胜感激
1条答案
按热度按时间dgiusagp1#
openjson函数仅在兼容级别130或更高的情况下可用。如果您的数据库兼容级别低于130,那么SQLServer将无法找到并运行openjson函数。其他json函数在所有兼容级别都可用。
您可以在sys.databases视图或数据库属性中检查兼容性级别。可以使用以下命令更改数据库的兼容级别:
即使在新的azure sql数据库中,兼容级别120也可能是默认值。