J'ai la requête suivante dans ORACLE :
SELECT *
FROM "Supplier" s
OUTER APPLY(
SELECT JSON_ARRAYAGG(JSON_OBJECT(p."Id", p."Description", p."Price")) as "Products"
FROM "Products" p
WHERE p."SupplierId" = s."Id"
) sp
Sur OUTER APPLY
Je crée un fichier json à partir des colonnes dont j'ai besoin, puis j'agrège ces objets dans un tableau json. J'ai besoin de ces deux fonctions car parfois je n'en utilise qu'une seule. J'aimerais effectuer la même opération dans SqlServer. Voici la solution que j'ai trouvée jusqu'à présent :
SELECT *
FROM "Supplier" as s
OUTER APPLY(
SELECT p."Id", p."Description", p."Price"
FROM "Products" as p
WHERE p."SupplierId" = s."Id"
FOR JSON PATH
) as sp("Products")
Le problème est que SqlServer exécute ces deux fonctions en même temps (c'est le but pour FOR JSON PATH
). Voici donc mes questions :
1) Est-il possible de créer un objet json sans le mettre dans un tableau (syntaxe de type oracle) ?
2) Est-il possible d'agréger des objets json dans un tableau ?
UPDATE J'utilise SqlServer version 2019 15.0.2000.5.
Résultat attendu (un seul enregistrement de produits au format json)
"Products":{
"Id":"FEB0646B709B45B5A306E10599716F28",
"Description":"Database Manager",
"Price":149.99
}