既定のスキーマを使用する OPENJSON の使用

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

オブジェクトのプロパティごと、または配列内の要素ごとに 1 つの行が含まれたテーブルを返すには、既定のスキーマを使用して OPENJSON を使用します。

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

例 - オブジェクトの各プロパティを返す

クエリ

SELECT *
FROM OPENJSON('{"name":"John","surname":"Doe","age":45}') 

結果

Key
name John
surname Doe
age 45

例 - 配列の各要素を返す

クエリ

SELECT [key],value
FROM OPENJSON('["en-GB", "en-UK","de-AT","es-AR","sr-Cyrl"]') 

結果

Key
0 en-GB
1 en-UK
2 de-AT
3 es-AR
4 sr-Cyrl

例 - JSON を一時テーブルに変換する

次のクエリのすべてのプロパティを返します、 情報 オブジェクトです。

DECLARE @json NVARCHAR(MAX)

SET @json=N'{  
     "info":{    
       "type":1,  
       "address":{    
         "town":"Bristol",  
         "county":"Avon",  
         "country":"Great Britain"  
       },  
       "tags":["Sport", "Water polo"]  
    },  
    "type":"Basic"  
 }'

SELECT *
FROM OPENJSON(@json,N'lax $.info')

結果

Key Type
type 1 0
address { "町":"ブリストル", "群":"エイボン", "国":"英国" } 5
tags [「スポーツ」、「Water ポーロ」] 4

例 - リレーショナル データと JSON データを結合する

次の例では、JSON 形式で SalesOrderReasons の配列を含む SalesReason テキスト列が、SalesOrderHeader テーブルにあります。 販売注文理由オブジェクトには、 「製造元」や「品質」などのプロパティが含まれます。 この例では、販売理由が別の子テーブルに含まれているかのように販売理由の JSON 配列を展開することで、すべての販売注文行を関連する販売理由に結合するレポートを作成します。

SELECT SalesOrderID,OrderDate,value AS Reason
FROM Sales.SalesOrderHeader
CROSS APPLY OPENJSON(SalesReasons)

この例では、OPENJSON から販売理由のテーブルが返されます。このテーブルでは、販売理由が値列として示されます。 CROSS APPLY 演算子は、OPENJSON テーブル値関数によって返される行に各販売注文の行を結合します。

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

Microsoft ビデオ

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

参照

OPENJSON (Transact-SQL)