Delen via


FOR JSON-uitvoer gebruiken in SQL Server en in client-apps

van toepassing op: SQL Server 2016 (13.x) en hoger Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (alleen serverloze SQL-pool)

In de volgende voorbeelden ziet u enkele manieren om de FOR JSON-component en de JSON-uitvoer ervan te gebruiken in SQL Server of in client-apps. queryresultaten opmaken als JSON met FOR JSON-

In Fabric Data Warehouse moet FOR JSON de laatste operator in de query zijn en dus niet toegestaan in subquery's, zoals in de voorbeelden in dit artikel.

FOR JSON-uitvoer gebruiken in SQL Server-variabelen

De uitvoer van de FOR JSON component is van het type nvarchar(max), zodat u deze kunt toewijzen aan elke variabele, zoals wordt weergegeven in het volgende voorbeeld.

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

FOR JSON-uitvoer gebruiken in door de gebruiker gedefinieerde SQL Server-functies

U kunt door de gebruiker gedefinieerde functies maken die resultatensets opmaken als JSON en deze JSON-uitvoer retourneren. In het volgende voorbeeld wordt een door de gebruiker gedefinieerde functie gemaakt waarmee een aantal detailrijen voor verkooporders worden opgehaald en opgemaakt als een JSON-matrix.

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

U kunt deze functie gebruiken in een batch of query, zoals wordt weergegeven in het volgende voorbeeld.

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

Ouder- en kindgegevens samenvoegen in één tabel

In het volgende voorbeeld wordt elke set onderliggende rijen opgemaakt als een JSON-array. De JSON-matrix wordt de waarde van de kolom Details in de bovenliggende tabel.

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  

De gegevens in JSON-kolommen bijwerken

In het volgende voorbeeld ziet u dat u de waarde van een kolom met JSON-tekst kunt bijwerken.

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

FOR JSON-uitvoer gebruiken in een C#-client-app

In het volgende voorbeeld ziet u hoe u de JSON-uitvoer van een query ophaalt in een StringBuilder-object in een C#-client-app. Stel dat de variabele queryWithForJson de tekst van een SELECT verklaring met een FOR JSON clausule bevat.

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());
            }
        }
    }
}

Meer informatie over JSON in de SQL Database Engine

Microsoft-video's

Zie de volgende video's voor een visuele inleiding tot de ingebouwde JSON-ondersteuning in SQL Server en Azure SQL Database: