JSON 데이터 형식

적용 대상: Microsoft Fabric의 SQL Server 2025(17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL 데이터베이스

json 데이터 타입은 JSON 문서를 이진 형식으로 저장합니다.

JSON 유형은 쿼리 및 조작에 최적화된 JSON 문서의 고충실도 저장을 제공합니다. 이 방법은 JSON 데이터를 varchar 또는 nvarchar로 저장할 때보다 다음과 같은 이점을 제공합니다:

  • 문서가 이미 파싱되어 있기 때문에 더 효율적인 읽기 방식입니다.
  • 쿼리가 문서 전체에 접근하지 않고도 개별 값을 업데이트할 수 있어 더 효율적인 쓰기 방식입니다.
  • 더 효율적인 저장 공간, 압축에 최적화되어 있습니다.
  • 기존 코드와의 호환성에 변화가 없습니다.

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 ) ]

문에 CREATE TABLE 포함된 열 정의에서 json 데이터 타입을 사용하세요. 다음은 그 예입니다.

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 데이터 타입은 Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x)에서 사용할 수 있습니다.

SQL Server 2025 (17.x)에서 JSON 지원에 관한 자세한 내용은 SQL Server 2025의 주요 JSON 기능을 참조하세요.

json 데이터 형식은 모든 데이터베이스 호환성 수준에서 사용할 수 있습니다.

Note

json 데이터 타입과 JSON 인덱스는 일반적으로 SQL Server 2025(17.x), Azure SQL Database, Azure SQL Managed Instance(SQL Server 2025 또는 Always-up-to-date업데이트 정책과 함께 Microsoft Fabric SQL 데이터베이스에 제공됩니다.

modify 메서드

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 개체 또는 JSON 배열이어야 합니다. 스칼라, 불리언 NULL , 값은 지원되지 않습니다. JSON 데이터 형식은 JSON 개체 또는 배열만 허용하는 IETF RFC 4627을 준수합니다.

ISJSON 함수를 사용해 문자열에 유효한 JSON 파일이 포함되어 있는지 테스트하세요. 타입 제약 조건이 없으면, ISJSON 최상위 레벨에서 JSON 객체나 배열만 허용하며, 이는 JSON 데이터 타입과 동일합니다. 타입 제약 조건은 VALUE IETF RFC 8259가 허용하는 대로 스칼라를 포함한 최상위 레벨의 모든 JSON 값을 허용합니다. ARRAY, , OBJECTSCALAR , 타입 제약 조건은 오직 그 타입만 받아들인다.

다음은 그 예입니다.

DECLARE @true AS JSON = 'true'; -- invalid
DECLARE @false AS JSON = 'false'; -- invalid
DECLARE @number AS JSON = '1234.56'; -- invalid
DECLARE @string AS JSON = '"contoso"'; -- invalid
DECLARE @null AS JSON = 'null'; -- invalid

DECLARE @null AS JSON = NULL; -- valid
DECLARE @object AS JSON = '{}'; -- valid
DECLARE @array AS JSON = '[]'; -- valid

함수 지원

모든 JSON 함수는 코드 변경 없이 JSON 데이터 타입을 지원합니다.

JSON 함수의 전체 목록은 JSON 함수를 참조하세요.

Indexes

json 열은 인덱스 정의에 포함된 열일 수도 있고, 필터링된 인덱스의 절에 WHERE 나타날 수도 있습니다. JSON 열은 표준 인덱스에서 키 열로 사용할 수 없습니다.

자세한 내용은 CREATE INDEX를 참조하세요.

Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x), 그리고 Microsoft Fabric의 SQL 데이터베이스에서는 JSON 문서 내 값에 접근하는 쿼리를 최적화하기 위해 JSON 인덱스를 만들 수 있습니다.

자세한 내용은 CREATE JSON INDEX를 참조하세요.

Conversion

json에서 char, nchar, varchar, nvarchar로 변환할 때는 명시적이어야 합니다. 사용 CAST 또는 CONVERT.

char, nchar, varchar, nvarchar, 벡터에서 json으로의 변환은 암묵적일 수도 있고 명시적일 수도 있습니다. json에서 벡터로의 변환은 암묵적일 수도 있고 명시적일 수도 있습니다.

json과 다른 모든 데이터 타입 간의 변환은 허용되지 않습니다.

json으로 변환하는 값은 JSON 객체나 JSON 배열이어야 합니다. JSON 스칼라, 1"abc"truenull는 는 오류가 13609를 유발합니다. 빈 문자열은 오류 13609도 발생시킵니다. 객체에 중복 키가 있으면 json 은 첫 번째 값을 유지하고 나머지 값은 버립니다. 오류가 발생하지 않습니다.

json에서 문자열 타입으로 변환하면 의미 없는 공백 없이 JSON 텍스트를 반환합니다. 목표 길이가 JSON 텍스트에 비해 너무 짧으면 오류 13639가 발생합니다. 가치는 잘라내지 않습니다.

json 데이터 형식은 sql_variant 형식과 함께 사용하거나 sql_variant 변수 또는 열에 할당할 수 없습니다. 이 제한은 varchar(max),varbinary(max),nvarchar(max), xml, 그리고 CLR 기반 데이터 타입과 유사합니다.

를 사용하여 varchar(max)와 같은 기존 열을 json으로 변환할 수 있습니다ALTER TABLE. xml 데이터 형식과 마찬가지로 json 열은 다음을 사용하여 ALTER TABLE문자열 또는 이진 형식으로 변환할 수 없습니다.

자세한 내용은 데이터 형식 변환(데이터베이스 엔진)을 참조하세요.

수치 정밀도

char, nchar, varchar, nvarchar에서 json으로 변환할 때, JSON 숫자가 포함된 JSON 텍스트는 숫자 형식에 따라 반올림할 수 있습니다.

정밀도를 유지하고 싶다면 JSON 숫자를 소수점 값으로 지정하세요. 마찬가지로, JSON 문서의 텍스트 표현을 보존해야 한다면 JSON 문서를 문자 문자열 데이터 타입으로 저장하세요.

Compatibility

json 데이터 타입은 사용자 정의 함수의 매개변수나 반환 타입, 또는 저장 프로시저의 매개변수로 사용할 수 있습니다. json 형식은 트리거 및 뷰와 호환됩니다.

현재 bcp 도구의 기본 형식은 json 데이터를 varchar 또는 nvarchar로 표현합니다. json 열을 지정하려면 서식 파일을 지정해야 합니다.

json 데이터 타입CREATE TYPE에 대해 .로 별칭 타입을 만들 수는 없습니다. 이 동작은 xml 데이터 형식과 동일합니다.

SELECT ... INTO 데이터 형식과 함께 사용하면 json 형식의 테이블이 만들어집니다.

Limitations

CAST CONVERT 그리고 예상대로 JSON 데이터 타입을 반환합니다.

드라이버 제한 사항

sp_describe_first_result_set 시스템 저장 프로시저가 드라이버가 TDS 기능 확장을 지원 JSONSUPPORT 한다면 json 데이터 타입을 올바르게 반환합니다. 이 확장을 지원하지 않는 드라이버는 varchar 또는 nvarchar 를 참고하세요.

SqlClient (>= 6.0) 및 JDBC (>= 13.2.0) 지원 JSONSUPPORT. 예를 들어, 최신 버전의 SQL Server Management Studio(SSMS)는 최신 SqlClient 드라이버를 사용하며 결과 집합 메타데이터에서 json 타입을 올바르게 보고합니다.

  • 가 없으면 JSONSUPPORTTDS >= 7.4(UTF-8 사용 시)가 varchar(max)를Latin1_General_100_BIN2_UTF8보고합니다.
  • 이 없으면 JSONSUPPORTTDS < 7.4 는 nvarchar(max)와 데이터베이스 콜레이션을 보고합니다.

크기 제한

스토리지에 있는 JSON 데이터의 크기 제한:

분야 Limitation
JSON 데이터 형식 크기(이진) 최대 2GB
고유 키 수 최대 32,000명까지
키당 문자열 크기 7,998 바이트
문자열 값 크기당 536,870,911 바이트
한 개체의 속성 수 최대 65,535명까지
한 배열의 요소 수 최대 65,535명까지
JSON 문서의 중첩 수준 수 128