Dela via


Använd FOR JSON för att generera utdata i SQL Server och i klientappar

gäller för: SQL Server 2016 (13.x) och senare Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (endast serverlös SQL-pool)

Följande exempel visar några av sätten att använda FOR JSON-satsen och dess JSON-utdata i SQL Server eller i klientappar. Formatera frågeresultat som JSON med FOR JSON

I Fabric Data Warehouse måste FOR JSON vara den sista operatorn i frågan och tillåts därför inte i underfrågor, som i exemplen i den här artikeln.

Använd "FÖR JSON"-utdata i SQL Server-variabler

Utdata från FOR JSON-satsen är av typen nvarchar(max), så du kan tilldela den till valfri variabel, som du ser i följande exempel.

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

Använd FÖR JSON-utdata i användardefinierade SQL Server-funktioner

Du kan skapa användardefinierade funktioner som formaterar resultatuppsättningar som JSON och returnerar dessa JSON-utdata. I följande exempel skapas en användardefinierad funktion som hämtar vissa försäljningsorderdetaljrader och formaterar dem som en JSON-matris.

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

Du kan använda den här funktionen i en batch eller fråga, som du ser i följande exempel.

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

Sammanfoga överordnade och underordnade data i en enda tabell

I följande exempel formateras varje uppsättning underordnade rader som en JSON-matris. JSON-matrisen blir värdet för kolumnen Information i den överordnade tabellen.

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  

Uppdatera data i JSON-kolumner

I följande exempel visas att du kan uppdatera värdet för en kolumn som innehåller JSON-text.

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

Använd FOR JSON-utdata i en C#-klientapp

I följande exempel visas hur du hämtar JSON-utdata från en fråga till ett StringBuilder-objekt i en C#-klientapp. Anta att variabeln queryWithForJson innehåller texten i en SELECT-instruktion med en FOR JSON-sats.

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

Läs mer om JSON i SQL Database Engine

Microsoft-videor

En visuell introduktion till det inbyggda JSON-stödet i SQL Server och Azure SQL Database finns i följande videor: