Sdílet prostřednictvím


Použití výstupu FOR JSON v SQL Serveru a v klientských aplikacích (SQL Server)

platí pro: SQL Server 2016 (13.x) a novější Azure SQL Databaseazure SQL Managed InstanceAzure Synapse Analytics (jenom bezserverový fond SQL)

Následující příklady ukazují některé způsoby použití klauzule FOR JSON a výstupu JSON v SQL Serveru nebo v klientských aplikacích.

Použití výstupu FOR JSON v proměnných SQL Serveru

Výstup klauzule FOR JSON je typu NVARCHAR(MAX), takže ho můžete přiřadit libovolné proměnné, jak je znázorněno v následujícím příkladu.

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

Použití výstupu FOR JSON v uživatelem definovaných funkcích SQL Serveru

Můžete vytvořit uživatelem definované funkce, které formátuje sady výsledků ve formátu JSON, a vrátit tento výstup JSON. Následující příklad vytvoří uživatelem definovanou funkci, která načte některé řádky podrobností prodejní objednávky a naformátuje je jako pole JSON.

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

Tuto funkci můžete použít v dávce nebo dotazu, jak je znázorněno v následujícím příkladu.

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

Sloučení nadřazených a podřízených dat do jedné tabulky

V následujícím příkladu se každá sada podřízených řádků naformátuje jako pole JSON. Pole JSON se stane hodnotou sloupce Details v nadřazené tabulce.

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  

Aktualizace dat ve sloupcích JSON

Následující příklad ukazuje, že můžete aktualizovat hodnotu sloupce, který obsahuje text JSON.

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

Použití výstupu FOR JSON v klientské aplikaci jazyka C#

Následující příklad ukazuje, jak načíst výstup JSON dotazu do objektu StringBuilder v klientské aplikaci jazyka C#. Předpokládejme, že proměnná queryWithForJson obsahuje text příkazu SELECT s klauzulí FOR JSON.

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

Další informace o FORMÁTU JSON v SQL Serveru a Azure SQL Database

Microsoft videa

Poznámka

Některé odkazy na video v této části nemusí v tuto chvíli fungovat. Microsoft migruje obsah dříve na channel 9 na novou platformu. Po migraci videí na novou platformu aktualizujeme odkazy.

Pro vizuální úvod k integrované podpoře JSON v SQL Serveru a Azure SQL Database, viz následující videa:

Viz také

Formátování výsledků dotazu jako JSON pomocí funkce FOR JSON (SQL Server)