適用対象: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL データベース
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更新ポリシー付き)、SQLデータベースがMicrosoft Fabricで利用可能です。
modify メソッド
json データ型は、modify メソッドをサポートしています。
modifyを使って、列に保存されているJSON文書を変更してください。
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型、OBJECT型、SCALAR型制約はその型のみを受け入れます。
例えば次が挙げられます。
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 Databaseでは、JSONドキュメント内の値にアクセスするクエリを最適化するためにJSONインデックスを作成できます。
詳細については、CREATE JSON INDEXを参照してください。
Conversion
jsonからcharへの変換は、nchar、varchar、nvarcharでなければなりません。
CAST または CONVERT を使用します。
char、nchar、varchar、nvarchar、ベクターからjsonへの変換は、暗黙的または明示的に行うことができます。 jsonからベクターへの変換は、暗黙的または明示的にも可能です。
jsonと他のすべてのデータ型間の変換は許可されていません。
jsonに変換する値はJSONオブジェクトかJSON配列でなければなりません。
1、"abc"、true、nullなどのJSONスカラーはエラー13609を引き起こします。 空文字列もエラー13609を引き起こします。 もしオブジェクトに重複キーがある場合、 json は最初の値を保持し、他の値は破棄します。 エラーは発生しません。
jsonから文字列型への変換は、余白を除いてJSONテキストを返します。 目標の長さがJSONテキストに対して短すぎるとエラー13639が発生します。 値が切り詰められることはありません。
json データ型は、sql_variant型と共に使用することも、sql_variantの変数または列に割り当てることはできません。 この制限はvarchar(max)、varbinary(max)、nvarchar(max)、xml、CLRベースのデータ型に類似しています。
を使用して、varchar(max) などの既存の列を ALTER TABLE に変換できます。
xml データ型と同様に、を使用して ALTER TABLE 列を任意の文字列型またはバイナリ型に変換することはできません。
詳細については、「 データ型変換 (データベース エンジン)」を参照してください。
数値精度
char、nchar、varchar、nvarcharからjsonに変換すると、JSON番号を含むJSONテキストは数字形式に基づいて丸めることができます。
精度を保つ必要がある場合は、JSONの数を小数点の数値として指定してください。 同様に、JSONドキュメントのテキスト表現を保持したい場合は、文字文字列データ型として保存してください。
Compatibility
jsonデータ型は、ユーザー定義関数のパラメータや戻り型として、あるいはストアドプロシージャのパラメータとして使用できます。 json 型はトリガーとビューと互換性があります。
現在、 bcp ツールのネイティブフォーマットは json データを varchar または nvarcharとして表現しています。 json 列を指定するには、フォーマット ファイルを指定する必要があります。
CREATE TYPEではjsonデータ型の別名タイプを作成することはできません。 この動作は、 xml データ型と同じです。
SELECT ... INTO データ型でを使用すると、json 型のテーブルが作成されます。
Limitations
CAST そして CONVERT 期待通り json データ型を返します。
ドライバーの制限事項
sp_describe_first_result_setシステムのストアドプロシージャは、ドライバがJSONSUPPORT TDS機能拡張をサポートしている場合、正しくjsonデータ型を返します。 この拡張をサポートしていないドライバーは varchar または nvarchar を参照してください。
SqlClient(>= 6.0)とJDBC(>= 13.2.0)は JSONSUPPORTをサポートしています。 例えば、最新バージョンのSQL Server Management Studio(SSMS)は最新のSqlClientドライバーを使用し、結果セットメタデータに正しくjson型を報告します。
-
JSONSUPPORTがない場合、TDS >= 7.4(UTF-8の場合)はvarchar(max)とLatin1_General_100_BIN2_UTF8119を報告します。 -
JSONSUPPORTがなければ、TDS < 7.4はnvarchar(max)とデータベースの照合を報告します。
サイズ制限
ストレージ内の JSON データのサイズ制限:
| フィールド | 制限事項 |
|---|---|
| JSON データ型のサイズ (バイナリ) | 最大2GBまで |
| 一意キーの数 | 最大で32,000人 |
| キー文字列サイズごと | 7,998バイト |
| 文字列値のサイズごと | 536,870,911バイト |
| 1 つのオブジェクト内のプロパティの数 | 最大65,535人 |
| 1 つの配列内の要素の数 | 最大65,535人 |
| JSON ドキュメント内の入れ子になったレベルの数 | 128 |