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
반응형