"table": [
{
"name": "Emergency",
"columns": [
{
"name": "ab",
"type": "long"
},
{
"name": "cd",
"type": "long"
},
{
"name": "ef",
"type": "long"
},
{
"name": "gh",
"type": "long"
},
],
"rows": [
[
0.55865,
2.0966,
0.4280,
1.4389
],
[
0.42490,
1.5723,
0.3601,
0.8031
]
]
}
]
}
所以在这个 json 中,行内的数组对象可以是多个(超过 2 个)。那么如何使用 OPENJSON SQL Server 函数计算数组 sinde 'rows' 的对象。
我所做的是,将此json存储到临时表#TempAb中,然后
DECLARE @ab VARCHAR(MAX);
DECLARE @cd VARCHAR(MAX);
DECLARE @ef VARCHAR(MAX);
DECLARE @gh VARCHAR(MAX);
SELECT @ab=ab,@cd=cd,@ef=ef,@gh=gh from #TempAb as ab CROSS APPLY
OPENJSON(ab.RawData, '$.table') WITH
(
ab Varchar(MAX) '$.rows[0][0],
cd Varchar(Max) '$.rows[0][1],
ef Varchar(Max) '$.rows[0][2],
gh Varchar(Max) '$.rows[0][3]
);
所以这个查询只返回行的第一个对象的数据,但我想要所有行对象的数据。所以我知道计数然后在while循环中迭代它
解决方案:
SET @cnt_total = (SELECT COUNT(O.[key]) FROM (VALUES(@jsonvalue))V(J)
CROSS APPLY OPENJSON(V.J)
WITH([Object] nvarchar(MAX) '$.table[0].rows' AS JSON) M
CROSS APPLY OPENJSON(M.[Object]) O)