適用対象:SQL Server 2025 (17.x) プレビュー
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric Preview の SQL データベース
JSON ドキュメントをネイティブ バイナリ形式で格納するネイティブ JSON データ型。
json 型は、クエリと操作を容易にできるように最適化された JSON ドキュメントの忠実性の高いストレージを提供し、JSON データを varchar または nvarchar に格納するよりも次の利点を提供します。
- ドキュメントが既に解析されているため、より効率的な読み取り
- クエリはドキュメント全体にアクセスすることなく個々の値を更新できるため、より効率的な書き込み
- 圧縮用に最適化された、より効率的なストレージ
- 既存のコードとの互換性に変更はありません
json 型は、UTF-8 エンコード (Latin1_General_100_BIN2_UTF8
) を使用して内部的にデータを格納します。 この動作は JSON 仕様に一致します。
JSON データのクエリの詳細については、SQL Server の JSON データを参照してください。
Sample syntax
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)
);
Feature availability
JSON 関数のサポートは、SQL Server 2016 (13.x) で最初に導入されました。 ネイティブ json 型は、2024 年に Azure SQL Database と Azure SQL Managed Instance で導入されました。
json は、すべてのデータベース互換性レベルで使用できます。
Note
- は、 Always-up-to-date 更新ポリシーを使用して構成された Azure SQL Database と Azure SQL Managed Instance で一般提供されています。
- は、SQL Server 2025 (17.x) プレビューのプレビュー段階です。
modify method
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;
Function support
すべての JSON 関数は、コードの変更や使用の違いなしで json 型をサポートします。
-
OPENJSON
現在、一部のプラットフォームでは json データ型はサポートされていません。 詳細については、「 制限事項」を参照してください。
JSON 関数の完全な一覧については、 JSON 関数を参照してください。
Indexes
JSON データの特殊なインデックスの種類はありません。
json 型は、CREATE INDEX
ステートメントのキー列として使用できません。 ただし、 json 列はインデックス定義に含まれる列として指定できます。 さらに、 json 列は、フィルター選択されたインデックスの WHERE
句に表示できます。
Conversion
json 型の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 ベースのデータ型に似ています。
ALTER TABLE
を使用して、varchar(max) 列などの既存の列を json に変換できます。
xml データ型と同様に、ALTER TABLE
を使用して json 列を文字列型またはバイナリ型に変換することはできません。
詳細については、「データ型の変換」を参照してください。
Compatibility
json 型は、ユーザー定義関数のパラメーターまたは戻り値の型、またはストアド プロシージャのパラメーターとして使用できます。 json 型はトリガーとビューと互換性があります。
現在、 bcp ツールのネイティブ形式には、 json ドキュメントが varchar または nvarchar として含まれています。 json データ型の列を指定するには、フォーマット ファイルを指定する必要があります。
json 型のCREATE TYPE
を使用したエイリアス型の作成は許可されません。 これは xml 型と同じ動作です。
JSON 型で 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) が表示されます。
- 現在、TDS >= 7.4 (UTF-8 を使用) では 、varchar(max) と
- 現在、
OPENJSON()
関数は、一部のプラットフォームでは json 型を受け入れていません。 現時点では、暗黙的な変換です。 最初に nvarchar(max) に明示的に変換します。- SQL Server 2025 (プレビュー) では、
OPENJSON()
関数は json 型をサポートします。 詳細については、「 SQL Server 2025 の主要な JSON 機能」を参照してください。
- SQL Server 2025 (プレビュー) では、