2016-07-28 8 views
2

データベースにクエリを実行し、結果をJson変数に格納するストアドプロシージャがあります。今私は特定の値を取得するインデックスでJson配列をループしたいと思います。いくつか私にこれを達成する方法を教えてくれますか?以下はopenjsonを選択するために、クエリを終了し始めたときに私のクエリ特定のインデックスで値を選択するためにsqlの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 

答えて

0

は、1つの以上の列を追加することができ、その値は、あなたのループインデックスです。 これで、開始位置の内側に別の場所検証を追加することができます。 OpenJSONはすべてのjsonを読み込んで新しい行に挿入します。

0

ソースHere

サンプルデータ

{ "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]] 
     ] 
    ] 
} 

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]') 
関連する問題