有没有办法可以在open json中将路径指定为变量,如下所示?
DECLARE @JSON NVARCHAR(MAX)
set @JSON = '{ "amounts": [
{
"Charge_Id": "368",
"Amount": "800",
"FineType_Id": 3,
"user_id": 2
},
{
"Charge_Id": "368",
"Amount": "600",
"FineType_Id": 4,
"user_id": 2
}
]
}';
DECLARE @counter int
DECLARE @expression NVARCHAR(50)
set @counter = 0
set @expression = ‘$.amounts[‘+CONVERT(NVARCHAR(10),@counter)+’]’
SELECT *
FROM OPENJSON(@JSON,@expression)
WITH(Charge_Id int, Amount money, FineType_Id int, user_id int)AS JSON
因为这会导致错误
Msg 102,Level 15,State 1,Line 31语法不正确 '@表达'。消息319,级别15,状态1,行32语法不正确 靠近关键字'with'。如果此语句是公用表 表达式,xmlnamespaces子句或更改跟踪上下文 子句,前一个语句必须以分号结束。
感谢您的帮助
答案 0 :(得分:1)
It looks like the compatibility level doesn't match with SQL 2016。您需要检查并更改此设置。致view or change your compatibility level:
连接到SQL Server数据库引擎的相应实例后,在对象资源管理器中,单击服务器名称。
展开数据库,并根据数据库选择用户数据库或展开系统数据库并选择系统数据库。
右键单击数据库,然后单击“属性”。
将打开“数据库属性”对话框。
在“选择页面”窗格中,单击“选项”。
当前兼容级别显示在兼容级别列表框中。
- 醇>
要更改兼容级别,请从列表中选择其他选项。选项包括SQL Server 2008(100),SQL Server 2012(110),SQL Server 2014(120),SQL Server 2016(130)和SQL Server 2017(140)。