2016-07-28 2 views
2

데이터베이스를 쿼리하고 그 결과를 Json 변수에 저장하는 저장 프로 시저가 있습니다. 이제 인덱스를 사용하여 Json 배열을 반복하여 특정 값을 얻고 싶습니다. 어떤 사람들은 이것을 어떻게 달성 할 수 있는지 말해 줄 수 있습니까? 아래는 내 쿼리입니다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

openjson을 선택하기 위해 쿼리를 끝낼 때 하나 이상의 열을 추가 할 수 있으며 그 값은 루핑 색인입니다. 그래서 시작 부분에 다른 유효성 검사를 추가 할 수 있습니다. 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]') 
관련 문제