Freigeben über


Verwenden der FOR JSON-Ausgabe im SQL-Datenbankmodul und in Client-Apps

Gilt für: SQL Server 2016 (13.x) und spätere versionen: Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (serverless SQL pool only)SQL database in Microsoft Fabric

Die folgenden Beispiele veranschaulichen einige möglichkeiten, die FOR JSON Klausel und die JSON-Ausgabe in SQL Server oder in Client-Apps zu verwenden. Weitere Informationen finden Sie unter Formatieren von Abfrageergebnissen als JSON mit FOR JSON.

In Fabric Data Warehouse FOR JSON muss der letzte Operator in der Abfrage sein und ist daher nicht innerhalb von Unterabfragen zulässig, wie in den Beispielen in diesem Artikel.

Verwenden der FOR JSON-Ausgabe in den Variablen des SQL-Datenbank-Engines

Die Ausgabe der FOR JSON Klausel ist vom Typ nvarchar(max), sodass Sie sie einer beliebigen Variablen zuweisen können, wie im folgenden Beispiel gezeigt.

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

Verwenden der FOR JSON-Ausgabe in benutzerdefinierten FUNKTIONEN des SQL-Datenbankmoduls

Sie können benutzerdefinierte Funktionen erstellen, die Resultsets als JSON formatieren und diese JSON-Ausgabe zurückgeben. Im folgenden Beispiel wird eine benutzerdefinierte Funktion erstellt, die einige Auftragsdetailzeilen abruft und sie als JSON-Array formatiert.

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

Sie können diese Funktion in einem Batch oder in einer Abfrage verwenden, wie im folgenden Beispiel gezeigt.

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

Zusammenführen von übergeordneten und untergeordneten Daten in einer einzelnen Tabelle

Im folgenden Beispiel wird jeder Satz von untergeordneten Zeilen als JSON-Array formatiert. Das JSON-Array wird der Wert der Spalte „Details“ in der übergeordneten Tabelle.

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  

Aktualisieren der Daten in JSON-Spalten

Im folgenden Beispiel wird gezeigt, dass Sie den Wert einer Spalte aktualisieren können, die JSON-Text enthält.

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

Verwenden der FOR JSON-Ausgabe in einer C#-Client-App

Im folgenden Beispiel wird veranschaulicht, wie die JSON-Ausgabe einer Abfrage in ein StringBuilder-Objekt in einer C#-Client-App abgerufen wird. Angenommen, die Variable queryWithForJson enthält den Text einer SELECT Anweisung mit einer FOR JSON Klausel.

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

Weitere Informationen zu JSON im SQL-Datenbankmodul

Eine visuelle Einführung in die integrierte JSON-Unterstützung finden Sie in den folgenden Videos: