如何循环遍历 sql 中的 json 数组以选择特定索引处的值

Aji*_*ine 7 sql-server json

我有一个查询数据库并将结果存储在 Json 变量中的存储过程。现在我想通过索引遍历 Json 数组以获取特定值。有人可以告诉我如何实现这一目标。下面是我的查询

 DECLARE @json NVARCHAR(Max)
 DECLARE @name VARCHAR(50) = 'Name'

 SET @json = (select name from getalldataView where 
 SOUNDEX(name) LIKE SOUNDEX(@name) FOR JSON PATH, ROOT('Names'))

 DECLARE @i int = 0

 WHILE @i < lengthOFArray
 BEGIN
       SET @i = @i + 1;

   SELECT value
   FROM OPENJSON(@json, '$.Names[',@i,']');

 END
Run Code Online (Sandbox Code Playgroud)

M_ *_* Fa 7

来源在这里

样本数据

{ "type": "MultiPolygon", 
    "coordinates": [
        [
            [[40, 40], [20, 45], [45, 30], [40, 40]]
        ], 
        [
            [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], 
            [[30, 20], [20, 15], [20, 25], [30, 20]]
        ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

sql代码

SELECT polygons.[key] as polygon, lines.[key] as line, x, y
FROM OPENJSON(@multipolygon, '$.coordinates') as polygons
       CROSS APPLY OPENJSON(polygons.value) as lines
              CROSS APPLY OPENJSON(lines.value)
                     WITH (x float '$[0]', y float '$[1]')
Run Code Online (Sandbox Code Playgroud)


小智 0

当您开始结束查询以选择 openjson 时,您可以再添加一列吗,该值是您的循环索引。因此您可以在 begin end 内添加另一个Where 验证。OpenJSON 读取所有 json 并将其插入到新行。