2017-11-17 2 views
2

다음 JSON이 있는데 이름 속성 값만 쿼리하면됩니다. 다음SQL에서 JSON 중첩 배열 객체 쿼리

DECLARE @j NVARCHAR(4000) = N'{ 
    "ArrayValue":[ 
     { 
      "name": "XXX", 
      "value": 10 
     }, 
     { 
      "name": "Memory123", 
      "value": 20 
     } 
    ] 
}' 

내가 OPENJSON()

SELECT value as Name 
FROM OPENJSON(@j, '$.ArrayValue') 

Whcih는 다음과 같은 출력을 얻을 것이다으로 얻을 것입니다.

Name 
--------------------------------------------------- 
{    "name": "Memory"   } 
{    "name": "Memory123"   } 

그러나 다음 형식의 출력이 필요합니다.

Name 
----- 
Memory 
Memory123 

바꾸기를 사용하지 않고 더 간단한 방법이 있습니까?

답변

2

ArrayValue를 JSON 열로 정의한 다음 CROSS APPLY를 사용하여 이름 값을 가져올 수 있습니다. 다음은 그 예입니다.

DECLARE @j NVARCHAR(4000) = N'{ 
    "ArrayValue":[ 
     { 
      "name": "XXX", 
      "value": 10 
     }, 
     { 
      "name": "Memory123", 
      "value": 20 
     } 
    ] 
}' 
SELECT b.name 
FROM OPENJSON(@j) 
WITH (ArrayValue NVARCHAR(MAX) AS JSON) AS a 
CROSS APPLY OPENJSON(a.ArrayValue) 
WITH ([name] NVARCHAR(100)) AS b