SQL Server 2016 JSON 형식을 일반  ROW 형식으로 반환하기

 

·         Version : SQL Server 2016

 

SQL Server 2016 부터 지원되는 JSON 형식은 쿼리 결과를 JSON 형식으로 반환 할 수 있으며 JSON 형식의 데이터를 일반 ROW로 데이터를 반환할 수도 있다이번 포스트에서는 JSON 형식의 데이터를 일반 ROW형식으로 반환하는 방법에 대해서 알아본다.

 

JSON 형식의 텍스트를 구문 분석하여 일반 ROW 형식으로 데이터를 반환하는 함수는 OPENJSON 이다. OPENJSON 함수를 사용하여 JSON 컬렉션을 행 집합으로 변환한 후 데이터에 대해서 SQL 쿼리를 실행하거나 SQL Server 테이블에 삽입할 수 있다.

 

OPEN JSON 함수는 단일 JSON 개체 또는 JSON 개체 컬렉션을 받아서 하나 또는 여러 개의 행으로 변환한다기본적으로 OPENJSON 함수는 다음 데이터를 반환한다.

·         JSON 개체에서 이 함수는 첫 번쨰 수준에서 발견된 모든 키:값 쌍을 반환한다.

·         JSON 배열에서 이 함수는 모든 요소  및 해당 인덱스를 반환한다.

WITH 옵션을 사용하여 열을 명시적으로 지정할 수 있다.

 

[기본 구조를 사용하는 OPENJSON]

결과에 대해 명시적으로 스키마를 제공하지 않는다.

DECLARE @json NVARCHAR(MAX)

 

SET @json='{"name":"John","surname":"Doe","age":45,"skills":["SQL","C#","MVC"]}';

 

SELECT *

FROM OPENJSON(@json);

 

 

[명시적 구조를 사용하는 OPENJSON]

OPENJSON 함수의 WITH절을 함께 사용하여 결과의 스키마를 지정하여 WITH에 포함된 열만 반환한다.

DECLARE @json NVARCHAR(MAX)

SET @json =  

  N'[ 

       { 

         "Order": { 

           "Number":"SO43659", 

           "Date":"2011-05-31T00:00:00" 

         }, 

         "AccountNumber":"AW29825", 

         "Item": { 

           "Price":2024.9940, 

           "Quantity":1 

         } 

       }, 

       { 

         "Order": { 

           "Number":"SO43661", 

           "Date":"2011-06-01T00:00:00" 

         }, 

         "AccountNumber":"AW73565", 

         "Item": { 

           "Price":2024.9940, 

           "Quantity":3 

         } 

      } 

 ]' 

 

SELECT * FROM 

 OPENJSON ( @json ) 

WITH (  

              Number   varchar(200) '$.Order.Number' , 

              Date     datetime     '$.Order.Date', 

              Customer varchar(200) '$.AccountNumber', 

              Quantity int          '$.Item.Quantity' 

 )

 

 

[참고자료]

https://docs.microsoft.com/en-us/sql/relational-databases/json/convert-json-data-to-rows-and-columns-with-openjson-sql-server

 

2017-10-17 / 강성욱 / http://sqlmvp.kr

 

SQL Server 2016, JSON format, OPENJSON

No. Subject Author Date Views
Notice [IT재직자] 개강임박!! 올해 마지막 무료 및 국비지원 교육 (JAVA, 리눅스 기초/고급 , CCNA, CCIE 등) 코난(김대우) 2022.12.02 111
Notice 2022년 11월 SQLER의 강좌 업데이트 리스트 코난(김대우) 2022.12.01 24
Notice 2022 공개SW 페스티벌 - Open Up 코난(김대우) 2022.12.01 15
2123 Run the SQL Server 2017 with Docker jevida(강성욱) 2019.03.25 464
2122 SQL Server Configuration Manager 실행 오류 (WMI 공급자 연결 오류) jevida(강성욱) 2019.03.25 518
2121 BULK INSERT 동시에 여러개 실행 향지 2019.01.30 957
2120 대용량 데이터 조인에 대한 고민 ( Hash Join VS Nested Loop Join ) 향지 2018.04.04 4391
2119 How to check if Azure SQL is using In-Memory jevida(강성욱) 2018.03.31 3261
2118 MSSQL-CLI를 활용한 크로스플랫폼에서 SQL Server 관리하기 jevida(강성욱) 2018.03.31 3589
2117 SSMS – Search for execution plan jevida(강성욱) 2018.03.31 3760
2116 SQL Server Parallelism and Wait change (CXAPCKET, CXCONSUMER) jevida(강성욱) 2018.03.31 4020
2115 SQL Server Statistics Update row sampling rate and histogram step jevida(강성욱) 2018.03.31 3679
2114 SSMS – AlwaysOn Group Latency report jevida(강성욱) 2018.03.31 3412
2113 SQL Server 백업 압축의 압축률 확인 jevida(강성욱) 2018.03.31 4168
2112 SQL Server 교착 상태 모니터링 (-T1222) jevida(강성욱) 2018.03.31 4231
2111 SQL Operations Studio - Linux, MAC에서 사용할 수 있는 SQL DBMS 툴 jevida(강성욱) 2018.03.31 3097
2110 SQL Server 2016 Large RAM 및 Checkpoint jevida(강성욱) 2018.03.31 2228
» SQL Server 2016 JSON 형식을 일반 ROW 형식으로 반환하 jevida(강성욱) 2018.03.31 1733
2108 model Database 손상시 발생하는 영향 및 복구 방법 jevida(강성욱) 2018.03.31 1210
2107 In-Memory OLTP 사용시 메모리 할당량 초과 오류 jevida(강성욱) 2017.09.13 6799
2106 SQL Server 2016 쿼리 실행에 대한 각 스레드(오퍼레이터) 성능 통계 jevida(강성욱) 2017.09.13 7098
2105 Multisubnet환경의 AG 그룹에서 링크드 서버 사용시 주의점 jevida(강성욱) 2017.09.13 5958
2104 SQL Linux에서 Job Agent 설치 jevida(강성욱) 2017.09.13 5996





XE Login

테스트 팝업
Close