Partager via


Utiliser la sortie FOR JSON dans le moteur de base de données SQL et dans les applications clientes

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (réservé au pool SQL sans serveur)Base de données SQL dans Microsoft Fabric

Les exemples suivants illustrent certaines des façons d’utiliser la clause FOR JSON et sa sortie JSON dans SQL Server ou dans les applications clientes. Pour plus d’informations, consultez Mettre les résultats de requête au format JSON avec FOR JSON.

Dans Fabric Data Warehouse, FOR JSON doit être le dernier opérateur de la requête, et n’est donc pas autorisé dans les sous-requêtes, comme dans les exemples de cet article.

Utiliser la sortie FOR JSON dans les variables du moteur de base de données SQL

La sortie de la clause FOR JSON est de type nvarchar(max), afin de pouvoir l’affecter à n’importe quelle variable, comme illustré dans l’exemple suivant.

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

Utiliser la sortie FOR JSON dans les fonctions définies par l’utilisateur du moteur de base de données SQL

Vous pouvez créer des fonctions définies par l’utilisateur qui convertissent les jeux de résultats au format JSON et renvoient cette sortie JSON. L'exemple suivant crée une fonction définie par l'utilisateur, qui extrait certaines lignes de détails de commandes de vente et les organise sous forme de tableau 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

Vous pouvez utiliser cette fonction dans un lot ou une requête, comme indiqué dans l’exemple suivant.

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

Fusionner les données du parent et de l'enfant dans une seule table

Dans l’exemple suivant, chaque ensemble de lignes enfants est mis en forme en tant que tableau JSON. Le tableau JSON devient la valeur de la colonne Détails dans la table parente.

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  

Mettre à jour les données dans les colonnes JSON

L’exemple suivant montre comment mettre à jour la valeur d’une colonne qui contient du texte JSON.

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

Utiliser la sortie de FOR JSON dans une application cliente C#

l’exemple suivant montre comment récupérer la sortie JSON d’une requête dans un objet StringBuilder d’une application cliente C#. Supposons que la variable queryWithForJson contient le texte d’une instruction SELECT avec une clause 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());
            }
        }
    }
}

En savoir plus sur JSON dans le moteur de base de données SQL

Pour une présentation visuelle de la prise en charge JSON intégrée, consultez les vidéos suivantes :