在 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 支援的觀看式簡介,請參閱下列影片:

另請參閱

使用 FOR JSON 將查詢結果格式化為 JSON (SQL Server)