次の方法で共有


JSON データ型

適用対象: SQL Server 2025 (17.x) プレビュー Azure SQL DatabaseAzure SQL Managed InstanceSQL データベース

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 は、すべてのデータベース互換レベルで使用できます。

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 メソッドがサポートされています。 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 関数」をご覧ください。

インデックス

JSON データの特殊なインデックスの種類はありません。

JSON 型は、CREATE INDEX ステートメントのキー列として使用できません。 ただし、JSON 列は、インデックス定義に含まれる列として指定できます。 さらに、JSON 列は、フィルター処理されたインデックスの WHERE 句に表示できます。

変換

CAST 型から CONVERT または を使用して、charncharvarcharnvarchar 型への明示的な変換ができます。 xml の動作と同様に、すべての暗黙的な変換は許可されません。 同様に、明示的に JSON 型に変換できるのは charncharvarcharnvarchar だけです。

JSON 型は、sql_variant 型と使用したり、sql_variant 変数または列に割り当てたりすることはできません。 この制限は、varchar(max)varbinary(max)nvarchar(max)xml、および CLR ベースのデータ型に似ています。

を使用して、varchar(max) 列などの既存の列を json 変換できます。 xml データ型と同様に、を使用して、ALTER TABLE 列を文字列またはバイナリ型に変換することはできません。

詳細については、「データ型の変換」を参照してください。

互換性

JSON 型は、ユーザー定義関数のパラメーターや戻り値の型、またはストアド プロシージャのパラメーターとして使用できます。 JSON 型は、トリガーやビューと互換性があります。

現在、bcp ツールのネイティブ形式には、JSON ドキュメントが varchar または nvarchar として含まれています。 JSON データ型の列を指定するには、フォーマット ファイルを指定する必要があります。

CREATE TYPE 型に対して を使用する別名型の作成は許可されません。 これは xml 型と同じ動作です。

JSON 型で SELECT ... INTO を使用すると、JSON 型のテーブルが作成されます。

制限事項

  • CAST ( ... AS JSON)の動作では json 型が返されますが、sp_describe_first_result_set システム ストアド プロシージャは json データ型を正しく返しません。 そのため、多くのデータ アクセス クライアントとドライバーには、varchar または nvarchar データ型が表示されます。
    • 現在、TDS = 7.4 (UTF-8) では、varchar(max) が 表示されます。
    • 現在、TDS < 7.4 では、データベースの照合順序 nvarchar(max) が確認されています。
  • 現在、 OPENJSON() 関数は、一部のプラットフォームでは json 型を受け入れていません。 現時点では、暗黙的な変換です。 最初に nvarchar(max) に明示的に変換します。