在 SQL Server 和用戶端應用程式中使用 FOR JSON 輸出 (SQL Server)
適用於: SQL Server 2016 (13.x) 以上版本 Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics (僅無伺服器 SQL 集區)
下列範例示範在 SQL Server 或用戶端應用程式中使用 FOR JSON 子句及其 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 Server 和 Azure SQL Database 中的 JSON
Microsoft 影片
注意
本節中的部分影片連結目前可能無法運作。 Microsoft 正在將先前在 Channel 9 上的內容移轉至新的平台。 我們會在影片移轉至新平台時更新連結。
如需 SQL Server 和 Azure SQL Database 中內建 JSON 支援的觀看式簡介,請參閱下列影片: