J'ai quelques json que je voudrais analyser dans SQL Server 2016. Il existe une structure hiérarchique de Projets-> Structures-> Propriétés. Je voudrais écrire une requête qui analyse l'ensemble de la hiérarchie, mais je ne veux pas préciser les éléments par numéro d'index-à-dire que je ne veux pas faire quoi que ce soit comme ceci:SQL Server OPENJSON read json imbriqué
openjson (@json, '$[0]')
ou
openjson (@json, '$.structures[0]')
J'ai eu cette idée que je pouvais lire les valeurs des objets de projet de niveau supérieur avec la chaîne json qui représente les structures en dessous, qui pourraient ensuite être analysées séparément. Le problème est que le code suivant ne fonctionne pas:
declare @json nvarchar(max)
set @json = '
[
{
"IdProject":"97A76363-095D-4FAB-940E-9ED2722DBC47",
"Name":"Test Project",
"structures":[
{
"IdStructure":"CB0466F9-662F-412B-956A-7D164B5D358F",
"IdProject":"97A76363-095D-4FAB-940E-9ED2722DBC47",
"Name":"Test Structure",
"BaseStructure":"Base Structure",
"DatabaseSchema":"dbo",
"properties":[
{
"IdProperty":"618DC40B-4D04-4BF8-B1E6-12E13DDE86F4",
"IdStructure":"CB0466F9-662F-412B-956A-7D164B5D358F",
"Name":"Test Property 2",
"DataType":1,
"Precision":0,
"Scale":0,
"IsNullable":false,
"ObjectName":"Test Object",
"DefaultType":1,
"DefaultValue":""
},
{
"IdProperty":"FFF433EC-0BB5-41CD-8A71-B5F09B97C5FC",
"IdStructure":"CB0466F9-662F-412B-956A-7D164B5D358F",
"Name":"Test Property 1",
"DataType":1,
"Precision":0,
"Scale":0,
"IsNullable":false,
"ObjectName":"Test Object",
"DefaultType":1,
"DefaultValue":""
}
]
}
]
}
]';
select IdProject, Name, structures
from openjson (@json)
with
(
IdProject uniqueidentifier,
Name nvarchar(100),
structures nvarchar(max)
) as Projects
IdProject et nom se sont retournés sans problème, mais pour une raison quelconque je ne peux pas obtenir le JSON imbriquée tenu à « structures ». Au lieu de la teneur en JSON il retourne simplement NULL:
Est-ce que quelqu'un sait si cela est possible et si oui, qu'est-ce que je fais mal?