Udostępnij za pośrednictwem


Używanie wyniku FOR JSON w aparacie bazy danych SQL oraz w aplikacjach klienckich

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje usługi Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (tylko bezserwerowa pula SQL)Baza danych SQL w usłudze Microsoft Fabric (wersja zapoznawcza)

W poniższych przykładach pokazano niektóre sposoby używania klauzuli FOR JSON i jego danych wyjściowych JSON w programie SQL Server lub w aplikacjach klienckich. Aby uzyskać więcej informacji, zobacz Formatowanie wyników zapytania w formacie JSON za pomocą FOR JSON.

W Fabric Data Warehouse, FOR JSON musi być ostatnim operatorem w zapytaniu, dlatego nie jest dozwolony wewnątrz podzapytań, jak pokazano w przykładach w tym artykule.

Użyj wyników FOR JSON w zmiennych silnika bazy danych SQL

Dane wyjściowe klauzuli FOR JSON są typu nvarchar(max), aby można było przypisać ją do dowolnej zmiennej, jak pokazano w poniższym przykładzie.

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

Używanie danych wyjściowych FOR JSON w funkcjach definiowanych przez użytkownika w aparacie bazy danych SQL

Można tworzyć funkcje zdefiniowane przez użytkownika, które formatować zestawy wyników jako dane JSON i zwracać te dane wyjściowe JSON. Poniższy przykład tworzy funkcję zdefiniowaną przez użytkownika, która pobiera niektóre wiersze szczegółów zamówienia sprzedaży i formatuje je jako tablicę 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

Tej funkcji można użyć w trybie wsadowym lub w zapytaniu, jak pokazano w poniższym przykładzie.

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

Złącz dane nadrzędne i podrzędne w jedną tabelę

W poniższym przykładzie każdy zestaw wierszy podrzędnych jest sformatowany jako tablica JSON. Tablica JSON staje się wartością kolumny Details w tabeli nadrzędnej.

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  

Aktualizowanie danych w kolumnach JSON

W poniższym przykładzie pokazano, że można zaktualizować wartość kolumny zawierającej tekst JSON.

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

Używanie wyjścia FOR JSON w aplikacji klienckiej języka C#

W poniższym przykładzie pokazano, jak pobrać dane wyjściowe JSON zapytania do obiektu StringBuilder w aplikacji klienckiej języka C#. Załóżmy, że zmienna queryWithForJson zawiera tekst instrukcji SELECT z 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());
            }
        }
    }
}

Dowiedz się więcej o JSON w silniku bazy danych SQL

Aby zapoznać się z wizualnym wprowadzeniem do wbudowanej obsługi kodu JSON, zobacz następujące wideo: