Share via


SQL Server およびクライアント アプリ (SQL Server) での FOR JSON 出力の使用

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

ここでは、SQL Server またはクライアント アプリでFOR JSON 句およびその JSON 出力を使用する方法を例として示します。

FOR JSON 出力を SQL Server の変数で使用する

FOR JSON 句の出力は NVARCHAR(MAX) 型のため、次の例に示すように、任意の変数に割り当てることができます。

DECLARE @x NVARCHAR(MAX) =
  (SELECT TOP 10 *
     FROM Sales.SalesOrderHeader
     FOR JSON AUTO)  

FOR JSON 出力を SQL Server のユーザー定義関数で使用する

結果セットを JSON として書式設定し、この JSON 出力を返すユーザー定義関数を作成することができます。 次の例では、いくつかの販売注文の詳細行を取得してそれを JSON 配列として書式設定するユーザー定義関数を作成しています。

CREATE FUNCTION GetSalesOrderDetails(@salesOrderId int)  
 RETURNS NVARCHAR(MAX)  
AS  
BEGIN  
   RETURN (SELECT UnitPrice, OrderQty  
           FROM Sales.SalesOrderDetail  
           WHERE SalesOrderID = @salesOrderId  
           FOR JSON AUTO)  
END

この関数は、次の例に示すように、バッチまたはクエリで使用することができます。

DECLARE @x NVARCHAR(MAX) = dbo.GetSalesOrderDetails(43659)

PRINT dbo.GetSalesOrderDetails(43659)

SELECT TOP 10
  H.*, dbo.GetSalesOrderDetails(H.SalesOrderId) AS Details
FROM Sales.SalesOrderHeader H

親と子のデータを 1 つのテーブルにマージする

次の例では、子の行の各セットは JSON 配列として書式設定されます。 JSON 配列は、親テーブルの Details 列の値になります。

SELECT TOP 10 SalesOrderId, OrderDate,  
      (SELECT TOP 3 UnitPrice, OrderQty  
         FROM Sales.SalesOrderDetail D  
         WHERE H.SalesOrderId = D.SalesOrderID  
         FOR JSON AUTO) AS Details  
INTO SalesOrder  
FROM Sales.SalesOrderHeader H  

JSON の列のデータを更新する

次の例に、JSON テキストを含む列の値を更新する方法を示します。

UPDATE SalesOrder  
SET Details =  
     (SELECT TOP 1 UnitPrice, OrderQty  
       FROM Sales.SalesOrderDetail D  
       WHERE D.SalesOrderId = SalesOrder.SalesOrderId  
      FOR JSON AUTO) 

C# クライアント アプリで FOR JSON 出力を使用する

次の例に、クエリの JSON の出力を C# クライアント アプリの StringBuilder オブジェクトに取得する方法を示します。 変数 queryWithForJson には FOR JSON 句を含む SELECT ステートメントのテキストが含まれているものと仮定します。

var queryWithForJson = "SELECT ... FOR JSON";
using(var conn = new SqlConnection("<connection string>"))
{
    using(var cmd = new SqlCommand(queryWithForJson, conn))
    {
        conn.Open();
        var jsonResult = new StringBuilder();
        var reader = cmd.ExecuteReader();
        if (!reader.HasRows)
        {
            jsonResult.Append("[]");
        }
        else
        {
            while (reader.Read())
            {
                jsonResult.Append(reader.GetValue(0).ToString());
            }
        }
    }
}

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

Microsoft ビデオ

Note

このセクションのビデオ リンクの一部は、現時点では機能しない場合があります。 Microsoft では、以前 Channel 9 上にあったコンテンツの新しいプラットフォームへの移行作業を進めています。 ビデオが新しいプラットフォームに移行されるに従ってリンクを更新します。

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

参照

FOR JSON を使用してクエリ結果を JSON として書式設定する (SQL Server)