JSON データ型 (プレビュー)

適用対象: Azure SQL データベース Azure SQL Managed Instance

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 関数の形式です。 新しいネイティブ JSON 型は、2024 年に Azure SQL プラットフォームで 初めて導入されました。

JSON は、すべてのデータベース互換レベルで使用できます。

Note

JSON データ型は現在、Azure SQL Database と Azure SQL Managed Instance のプレビュー段階にあります (Always-up-to-date 更新ポリシーで構成)。

サポートされる関数

すべての JSON 関数は、コードの変更や使用方法の違いを必要とせずに JSON 型をサポートします。

JSON 関数の完全なリストについては、「JSON 関数」をご覧ください。

インデックス

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

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

Conversion

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

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

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

互換性

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

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

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)Latin_General_100_bin2_utf8 が表示されます。
    • 現在、TDS < 7.4 のサポートでは、データベース照合順序を持つ nvarchar(max) が表示されます。
  • 現在、OPENJSON() 関数は 暗黙的な変換であるため、JSON 型を受け入れていません。 最初に nvarchar(max) に明示的に変換します。