適用於: SQL Server 2016 (13.x) 以上版本
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics (僅無伺服器 SQL 集區)
下列範例示範在 SQL Server 或用戶端應用程式中使用 FOR JSON
子句及其 JSON 輸出的一些方式。
使用 FOR JSON 將查詢結果格式化為 JSON
在網狀架構數據倉儲中,FOR JSON
必須是查詢中的最後一個運算符,因此不允許在子查詢內,如本文中的範例所示。
在 SQL Server 變數中使用 FOR JSON 輸出
FOR JSON
子句的輸出類型為 nvarchar(max),因此您可以將它指派給任何變數,如下列範例所示。
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
在 SQL Server 使用者定義函數中使用 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
將父資料和子資料合併至單一資料表中
在下列範例中,每組子資料列會格式化為 JSON 陣列。 JSON 陣列便成為父資料表中的 [詳細資料] 資料行的值。
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 Database Engine 中的 JSON
Microsoft 影片
如需 SQL Server 和 Azure SQL Database 中內建 JSON 支援的觀看式簡介,請參閱下列影片: