適用対象:Sql Server 2016 (13.x) 以降のバージョン
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (サーバーレス SQL プールのみ)、
Microsoft Fabric プレビューの SQL データベース
次の例では、SQL Server またはクライアント アプリで FOR JSON
句とその JSON 出力を使用する方法をいくつか示します。 詳細については、「FOR JSON を使用してクエリ結果を JSON として書式設定する」を参照してください。
Fabric Data Warehouse では、 FOR JSON
はクエリの最後の演算子である必要があるため、この記事の例のように、サブクエリ内では使用できません。
SQL Database エンジン変数で FOR JSON 出力を使用する
FOR JSON
句の出力は nvarchar(max) 型であるため、次の例に示すように、任意の変数に代入できます。
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
SQL Database エンジンのユーザー定義関数で FOR JSON 出力を使用する
結果セットを 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
に、SELECT
句を含むFOR JSON
ステートメントのテキストが含まれているとします。
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 データベース エンジンでの JSON の詳細
組み込みの JSON サポートの視覚的な概要については、次のビデオを参照してください。
関連コンテンツ
- for JSON を使用してクエリ結果を JSON として書式設定する