본문으로 바로가기

OPENJSON 구문 사용하기

category 프로그래밍SQL 5년 전

JSON 오브젝트를 테이블 처럼 사용하는 방법 (신박한 방법!)

- SqlServer 2016 부터 사용 가능. Azure DB에서 사용 가능.

1. 테이블변수처럼 JSON 테이블을 선언하고 만들자.

DECLARE @tbl_json NVARCHAR(MAX) = N'{
    "Table": [{
        "PRODUCT_CD": "PRD01",
        "PRODUCT_NM": "도서01"
    }, {
        "PRODUCT_CD": "PRD02",
        "PRODUCT_NM": "도서02"
    }, {
        "PRODUCT_CD": "PRD03",
        "PRODUCT_NM": "도서03"
    }]
}'
;

 

2. 테이블변수 만든 것을 조회해 보자.

SELECT * FROM OPENJSON(@tbl_json, '$.Table');

 

3. OPENJSON으로 읽어들인 데이터를 실제 테이블 처럼 사용하기 위해 WITH 구문을 이용하자.

SELECT * FROM OPENJSON(@tbl_json, '$.Table')
WITH (
  PRODUCT_CD nvarchar(100) '$.PRODUCT_CD',
  PRODUCT_NM nvarchar(100) '$.PRODUCT_NM'
)
;

 

 

4. 이제 모두 함께 실행하여 실제 테이블을 만들고 데이터를 입력해 보자.

DECLARE @tbl_json NVARCHAR(MAX) = N'{
    "Table": [{
        "PRODUCT_CD": "PRD01",
        "PRODUCT_NM": "도서01"
    }, {
        "PRODUCT_CD": "PRD02",
        "PRODUCT_NM": "도서02"
    }, {
        "PRODUCT_CD": "PRD03",
        "PRODUCT_NM": "도서03"
    }]
}'
;

CREATE TABLE TBL_JSON (
  PRODUCT_CD varchar(100),
  PRODUCT_NM varchar(100)
);

INSERT INTO TBL_JSON 
SELECT * FROM OPENJSON(@tbl_json, '$.Table')
WITH (
  PRODUCT_CD nvarchar(100) '$.PRODUCT_CD',
  PRODUCT_NM nvarchar(100) '$.PRODUCT_NM'
)
;

SELECT * FROM dbo.TBL_JSON
;

 

[참고]

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver15

 

OPENJSON(Transact-SQL) - SQL Server

OPENJSON(Transact-SQL)

docs.microsoft.com

 

반응형

프로그래밍SQL카테고리의 다른글

인덱스 Rebuild all tables  (0) 2017.02.01
SQLServer 윈도우 계정으로 로그인  (0) 2016.08.02