Utiliser la sortie de FOR JSON dans SQL Server et les applications clientes (SQL Server)

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (pool SQL serverless uniquement)

Les exemples suivants illustrent quelques-unes des façons d’utiliser la clause FOR JSON et sa sortie JSON dans SQL Server ou dans des applications clientes.

Utiliser la sortie de FOR JSON dans des variables SQL Server

La sortie de la clause FOR JSON est de type NVARCHAR(MAX). Vous pouvez donc l’assigner à une variable, comme indiqué dans l’exemple suivant.

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

Utiliser la sortie de FOR JSON dans des fonctions SQL Server définies par l’utilisateur

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 commande et les organise en un 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 parentes et enfants 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 contienne 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 SQL Server et Azure SQL Database

Vidéos Microsoft

Remarque

Certains des liens vidéo de cette section peuvent ne pas fonctionner pour l’instant. Microsoft migre le contenu précédemment disponible sur Channel 9 vers une nouvelle plateforme. Nous allons mettre à jour les liens au fur et à mesure que les vidéos sont migrées vers la nouvelle plateforme.

Pour obtenir une présentation visuelle de la prise en charge intégrée de JSON dans SQL Server et Azure SQL Database, consultez les vidéos suivantes :

Voir aussi

Mettre les résultats de requête au format JSON avec FOR JSON (SQL Server)