Megosztás a következőn keresztül:


A FOR JSON-kimenet használata az SQL Database Engine-ben és az ügyfélalkalmazásokban

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók, Azure SQL Database, AzureSQL Managed Instance,Azure Synapse Analytics (serverless SQL pool only)SQL database in Microsoft Fabric

Az alábbi példák bemutatják a FOR JSON záradék és JSON-kimenetének használatát az SQL Serveren vagy az ügyfélalkalmazásokban. További információ: Lekérdezési eredmények formázása JSON-ként a FOR JSON használatával.

A Fabric Data Warehouse-ban FOR JSON kell lennie a lekérdezés utolsó operátorának, és így nem engedélyezett az al lekérdezésekben, mint a cikkben szereplő példákban.

A FOR JSON-kimenet használata az SQL Database Engine változóiban

A FOR JSON záradék kimenete nvarchar(max)típusú, így bármely változóhoz hozzárendelheti, ahogyan az alábbi példában látható.

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

JSON-kimenet használata az SQL Database Engine felhasználó által definiált függvényeiben

Létrehozhat felhasználó által definiált függvényeket, amelyek az eredményhalmazokat JSON-ként formázzák, és visszaadják ezt a JSON-kimenetet. Az alábbi példa egy felhasználó által definiált függvényt hoz létre, amely lekéri az értékesítési rendelés részletes sorait, és JSON-tömbként formázza őket.

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

Ezt a függvényt kötegben vagy lekérdezésben is használhatja az alábbi példában látható módon.

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

Szülő- és gyermekadatok egyesítése egyetlen táblába

Az alábbi példában minden gyermeksor JSON-tömbként van formázva. A JSON-tömb a szülőtábla Részletek oszlopának értéke lesz.

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  

Az adatok frissítése JSON-oszlopokban

Az alábbi példa bemutatja, hogy frissítheti egy JSON-szöveget tartalmazó oszlop értékét.

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

A FOR JSON-kimenet használata C#-ügyfélalkalmazásban

Az alábbi példa bemutatja, hogyan kérhető le egy lekérdezés JSON-kimenete egy StringBuilder-objektumba egy C#-ügyfélalkalmazásban. Tegyük fel, hogy a queryWithForJson változó egy SELECT utasítás szövegét tartalmazza egy FOR JSON záradékkal.

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

További információ a JSON-ról az SQL Database Engine-ben

A beépített JSON-támogatás vizuális bemutatásához tekintse meg az alábbi videókat: