明示的なスキーマで OPENJSON を使用する (SQL Server)

適用対象: SQL Server 2016 (13.x) Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (サーバーレスのSQLプールのみ)

OPENJSON と共に明示的なスキーマを使用し、WITH 句で指定した書式設定のテーブルを返します。

ここでは、 OPENJSON と明示的なスキーマを使用する例をいくつか紹介します。 詳細情報とその他の例については、「OPENJSON(Transact-SQL)」を参照してください。

例 - WITH 句を使用し、出力を書式設定する

次のクエリでは、次の表に示すように結果を返します。 JSON の AS 句が col5 および array_element でスカラー値ではなく、JSON オブジェクトとして返される値がどのように発生する方法に注意してください。

DECLARE @json NVARCHAR(MAX) =
N'{"someObject":   
    {"someArray":  
      [  
          {"k1": 11, "k2": null, "k3": "text"},  
          {"k1": 21, "k2": "text2", "k4": { "data": "text4" }},  
          {"k1": 31, "k2": 32},  
          {"k1": 41, "k2": null, "k4": { "data": false }}     
       ]  
    }  
 }'  
   
SELECT * FROM  
 OPENJSON(@json, N'lax $.someObject.someArray')  
WITH ( k1 int,   
        k2 varchar(100),  
        col3 varchar(6) N'$.k3',  
        col4 varchar(10) N'lax $.k4.data',  
        col5 nvarchar(MAX) N'lax $.k4' AS JSON, 
        array_element nvarchar(MAX) N'$' AS JSON  
 )  

結果

k1 k2 col3 col4 col5 array_element
11 NULL "text" NULL NULL {"k1": 11、"k2": null の場合、"k3":"text"}
21 テキスト「2」 NULL テキスト「4」 {「データ」:"テキスト"が 4]} {"k1": true,"k2":"text2"、"k4": {「データ」: テキスト「4」}}
31 "32" NULL NULL NULL {"k1": 31 日"k2": 32}
41 NULL NULL false {「データ」: false} {"k1": 41、"k2": null の場合、"k4": {「データ」: false}}

例 - JSON を SQL Server テーブルに読み込む。

次の例では、全体の JSON オブジェクトを SQL Server テーブルです。

DECLARE @json NVARCHAR(MAX) = '{  
  "id" : 2,  
  "firstName": "John",  
  "lastName": "Smith",  
  "isAlive": true,  
  "age": 25,  
  "dateOfBirth": "2015-03-25T12:00:00",  
  "spouse": null  
  }';  
   
  INSERT INTO Person  
  SELECT *   
  FROM OPENJSON(@json)  
  WITH (id int,  
        firstName nvarchar(50), lastName nvarchar(50),   
        isAlive bit, age int,  
        dateOfBirth datetime2, spouse nvarchar(50))  

SQL Server と Azure SQL Database の JSON の詳細情報

Microsoft ビデオ

SQL Server と Azure SQL Database に組み込まれている JSON のサポートの視覚的な紹介は、次のビデオをご覧ください。

参照

OPENJSON (Transact-SQL)