Utiliser la sortie de FOR JSON dans SQL Server et les applications clientes
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 certaines des façons d’utiliser la clause FOR JSON
et sa sortie JSON dans SQL Server ou dans les applications clientes.
Formater les résultats de la 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 de FOR JSON dans des variables SQL Server
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 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 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
Vidéos Microsoft
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 :