Delen via


FOR JSON-uitvoer gebruiken in de SQL Database Engine en in client-apps

Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (alleen serverloze SQL-pool)SQL-database in Microsoft Fabric Preview

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. Zie Queryresultaten opmaken als JSON met FOR JSON voor meer informatie.

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 de variabelen van de SQL Database Engine

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 de door de gebruiker gedefinieerde SQL Database Engine-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

Zie de volgende video's voor een visuele inleiding tot de ingebouwde JSON-ondersteuning: