適用対象: 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 ) ]
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 型はAzure SQL DatabaseおよびAzure SQL Managed Instanceで導入され、SQL Server 2025(17.x)でも利用可能です。
json データ型は、すべてのデータベース互換性レベルで使用できます。
Note
- は、SQL Server 2025 または Always-up-to-date更新ポリシーを使用して、Azure SQL Database と Azure SQL Managed Instance で一般提供されています。
- は、Fabric の SQL Server 2025 (17.x) および SQL データベースのプレビュー段階にあります。
modify メソッド
Note
modifyメソッドは現在プレビュー段階で、SQL Server 2025(17.x)でのみ利用可能です。
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 データ型をサポートします。
-
OPENJSON現在、一部のプラットフォームでは json データ型はサポートされていません。 詳細については、「 制限事項」を参照してください。
JSON 関数の完全な一覧については、 JSON 関数を参照してください。
Indexes
JSON データの特殊なインデックスの種類はありません。
json 型は、CREATE INDEX ステートメントのキー列として使用できません。 ただし、 json 列はインデックス定義に含まれる列として指定できます。 さらに、 json 列は、フィルター選択されたインデックスの WHERE 句に表示できます。
Conversion
CAST 型のCONVERTまたはを使用した明示的な変換は、char、nchar、varchar、および nvarchar 型に対して実行できます。
xml の動作と同様に、すべての暗黙的な変換は許可されません。 同様に、json データ型に明示的に変換できるのは、char、nchar、varchar、および nvarchar のみです。
json データ型は、sql_variant型と共に使用することも、sql_variantの変数または列に割り当てることはできません。 この制限は、 varchar(max)、 varbinary(max)、 nvarchar(max)、 xml、CLR ベースのデータ型に似ています。
を使用して、varchar(max) などの既存の列を ALTER TABLE に変換できます。
xml データ型と同様に、を使用して ALTER TABLE 列を任意の文字列型またはバイナリ型に変換することはできません。
詳細については、「 データ型変換 (データベース エンジン)」を参照してください。
Compatibility
json データ型は、ユーザー定義関数のパラメーターまたは戻り値の型、またはストアド プロシージャのパラメーターとして使用できます。 json 型はトリガーとビューと互換性があります。
現在、 bcp ツールのネイティブ形式には、 json ドキュメントが varchar または nvarchar として含まれています。 json 列を指定するには、フォーマット ファイルを指定する必要があります。
CREATE TYPE データ型のを使用したエイリアス型の作成は許可されません。 この動作は、 xml データ型と同じです。
SELECT ... INTO データ型でを使用すると、json 型のテーブルが作成されます。
Limitations
CAST ( ... AS JSON)の動作では json データ型が返されますが、sp_describe_first_result_set システム ストアド プロシージャは json データ型を正しく返しません。 そのため、多くのデータ アクセス クライアントとドライバーでは 、varchar または nvarchar データ型が表示されます。
- 現在、TDS >= 7.4 (UTF-8 を使用) では 、varchar(max) と
Latin_General_100_bin2_utf8が表示されます。 - 現在、TDS < 7.4 では、データベース照合順序を持つ nvarchar(max) が表示されます。
現時点では、 OPENJSON() 関数は、一部のプラットフォームでは json データ型を受け入れていません。 現時点では、暗黙的な変換です。 最初に nvarchar(max) に明示的に変換します。
- SQL Server 2025(17.x)では、
OPENJSON()関数は jsonをサポートしています。 詳細については、「 SQL Server 2025 の主要な JSON 機能」を参照してください。
サイズ制限
ストレージ内の JSON データのサイズ制限:
| フィールド | 制限事項 |
|---|---|
| JSON データ型のサイズ (バイナリ) | 最大 2 GB |
| 一意キーの数 | 最大 32K |
| キー文字列サイズごと | 7998 バイト |
| 文字列値のサイズごと | 536870911 バイト |
| 1 つのオブジェクト内のプロパティの数 | 最大 65535 |
| 1 つの配列内の要素の数 | 最大 65535 |
| JSON ドキュメント内の入れ子になったレベルの数 | 128 |