적용 대상: SQL Server 2025(17.x)
Microsoft Fabric에서Azure SQL Database
Azure SQL Managed Instance
SQL 데이터베이스 미리 보기
JSON 문서를 네이티브 이진 형식으로 저장하는 네이티브 json 데이터 형식입니다.
json 형식은 쿼리 및 조작이 용이하도록 최적화된 JSON 문서의 고충실도 스토리지를 제공하며, varchar 또는 nvarchar에 JSON 데이터를 저장하는 것보다 다음과 같은 이점을 제공합니다.
- 문서가 이미 구문 분석되어 있어 더 효율적인 읽기
- 쿼리가 전체 문서에 액세스하지 않고 개별 값을 업데이트할 수 있어 더 효율적인 쓰기
- 압축에 최적화되어 더 효율적인 스토리지
- 기존 코드와의 호환성에는 변경 사항 없음
json 형식은 UTF-8 인코딩인 Latin1_General_100_BIN2_UTF8
을 사용하여 데이터를 내부적으로 저장합니다. 이 동작은 JSON 사양과 일치합니다.
JSON 데이터 쿼리에 대한 자세한 내용은 SQL Server의 JSON 데이터를 참조하세요.
샘플 구문
json 형식의 사용 구문은 테이블의 다른 모든 SQL Server 데이터 형식과 유사합니다.
column_name JSON [NOT NULL | NULL] [CHECK(constraint_expression)] [DEFAULT(default_expression)]
json 형식은 CREATE TABLE
문에 포함된 열 정의에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.
CREATE TABLE Orders (order_id int, order_details JSON NOT NULL);
제약 조건은 열 정의의 일부로 지정할 수 있습니다. 예를 들면 다음과 같습니다.
CREATE TABLE Orders (order_id int, order_details JSON NOT NULL
CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);
기능 가용성
JSON 함수 지원은 SQL Server 2016(13.x)에서 처음 도입되었습니다. 네이티브 json 형식은 2024년에 Azure SQL Database 및 Azure SQL Managed Instance에 도입되었습니다.
JSON은 모든 데이터베이스 호환성 수준에서 사용할 수 있습니다.
참고 항목
- 는 Always-up-to-date 업데이트 정책을 사용하여 구성된 Azure SQL Database 및 Azure SQL Managed Instance에 일반적으로 사용할 수 있습니다.
- 는 SQL Server 2025(17.x) 미리 보기용 미리 보기로 제공됩니다.
modify 메서드
참고 항목
modify
메서드는 현재 미리 보기 상태이며 SQL Server 2025(17.x) 미리 보기에서만 사용할 수 있습니다.
네이티브 json 형식은 메서드를 modify
지원합니다. 열에 저장된 JSON 문서를 수정하는 데 사용합니다 modify
. 이 modify
메서드는 가능한 경우 데이터를 현재 위치로 수정하도록 최적화되어 있으며 json 형식 열에서 JSON 문서를 수정하는 데 선호되는 방법입니다.
JSON 문자열의 경우 새 값이 기존 값보다 작거나 같으면 현재 위치 수정이 가능합니다.
JSON 번호의 경우 새 값이 동일한 형식이거나 기존 값 범위 내에 있는 경우 현재 위치 수정이 가능합니다.
DROP TABLE IF EXISTS JsonTable;
CREATE TABLE JsonTable ( id int PRIMARY KEY, d JSON );
INSERT INTO JsonTable (id, d) VALUES(1, '{"a":1, "b":"abc", "c":true}');
UPDATE JsonTable
SET d.modify('$.a', 14859)
WHERE id = 1;
UPDATE JsonTable
SET d.modify('$.b', 'def')
WHERE id = 1;
함수 지원
모든 JSON 함수는 코드 변경이나 사용법의 차이 없이 json 형식을 지원합니다.
-
OPENJSON
현재 일부 플랫폼에서 는 json 데이터 형식을 지원하지 않습니다. 자세한 내용은 제한 사항을 참조하세요.
JSON 함수의 전체 목록은 JSON 함수를 참조하세요.
인덱스
JSON 데이터에 대한 특수한 인덱스 형식은 없습니다.
json 형식은 CREATE INDEX
문에서 키 열로 사용할 수 없습니다. 그러나 json 열은 인덱스 정의에 포함된 열로 지정할 수 있습니다. 또한 json 열은 필터링된 인덱스의 WHERE
절에 나타날 수 있습니다.
전환
CAST
형식에서 CONVERT
또는 를 사용하여 char, nchar, varchar 및 nvarchar 형식으로 명시적 변환을 수행할 수 있습니다.
xml의 동작과 유사하게 모든 암시적 변환은 허용되지 않습니다. 마찬가지로, char, nchar, varchar 및 nvarchar만 json 형식으로 명시적 변환이 가능합니다.
json 형식은 sql_variant 형식과 함께 사용하거나 sql_variant 변수 또는 열에 할당할 수 없습니다. 이 제한은 varchar(max), varbinary(max), nvarchar(max), xml, CLR 기반 데이터 형식과 유사합니다.
사용하여 varchar(max) 열과 같은 기존 열을 ALTER TABLE
변환할 수 있습니다.
xml 데이터 형식과 마찬가지로 사용하여 ALTER TABLE
열을 문자열 또는 이진 형식으로 변환할 수 없습니다.
자세한 내용은 데이터 형식 변환을 참조하세요.
호환성
json 형식은 사용자 정의 함수의 매개 변수 또는 반환 형식 또는 저장 프로시저의 매개 변수로 사용할 수 있습니다. json 형식은 트리거 및 뷰와 호환됩니다.
현재 bcp 도구의 네이티브 형식에는 json 문서가 varchar 또는 nvarchar로 포함되어 있습니다. json 데이터 형식 열을 지정하려면 서식 파일을 지정해야 합니다.
CREATE TYPE
형식에 을 사용하여 별칭 형식을 만드는 것은 허용되지 않습니다. 이는 xml 형식과 동일한 동작입니다.
JSON 형식과 함께 SELECT ... INTO
사용하면 JSON 형식의 테이블이 만들어집니다.
제한 사항
-
CAST ( ... AS JSON)
형식을 반환하지만 sp_describe_first_result_set 시스템 저장 프로시저가 json 데이터 형식을 올바르게 반환하지 않습니다. 따라서 많은 데이터 액세스 클라이언트와 드라이버에 varchar 또는 nvarchar 데이터 형식이 표시됩니다.- 현재 TDS >= 7.4(UTF-8 포함)에는
Latin_General_100_bin2_utf8
표시됩니다. - 현재 TDS
7.4는 데이터베이스 데이터 정렬을 사용하여 nvarchar(max) 확인합니다.
- 현재 TDS >= 7.4(UTF-8 포함)에는
- 현재 함수는
OPENJSON()
일부 플랫폼에서 json 형식을 허용하지 않습니다. 현재는 암시적 변환입니다. 먼저 nvarchar(max)로 명시적으로 변환하세요.- SQL Server 2025(미리 보기)
OPENJSON()
에서 함수는 json 형식을 지원합니다. 자세한 내용은 SQL Server 2025의 주요 JSON 기능을 참조하세요.
- SQL Server 2025(미리 보기)