如何解决如何使用SQL OPENJSON函数和交叉APPLY测量json文件中数组内数组的长度
"table": [
{
"name": "Emergency","columns": [
{
"name": "ab","type": "long"
},{
"name": "cd",{
"name": "ef",{
"name": "gh",],"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)
解决方法
首先你必须从有效的 JSON 开始,然后是这样的:
declare @json nvarchar(max) = N'
{
"table": [
{
"name": "Emergency","columns": [
{
"name": "ab","type": "long"
},{
"name": "cd",{
"name": "ef",{
"name": "gh","type": "long"
}
],"rows": [
[
0.55865,2.0966,0.4280,1.4389
],[
0.42490,1.5723,0.3601,0.8031
]
]
}
]
}
'
select count(*) from
OPENJSON(@json,'$.table[0].rows') d
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。