SQL Server OPENJSON lecture json imbriqué

J'ai quelques json que je voudrais analyser dans SQL Server 2016. Il y a une hiérarchie de la structure 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 de spécifier des éléments par numéro d'index ie je ne veux pas faire quelque chose comme ceci:

openjson (@json, '$[0]')

ou

openjson (@json, '$.structures[0]')

J'ai eu cette idée que je pouvais lire les valeurs de haut niveau les objets du projet, le long de la chaîne json qui représente les structures ci-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 le Nom de renvoi, aucun problème, mais pour une raison que je ne peut pas obtenir la imbriquée json détenus dans les structures. Au lieu de le contenu json elle retourne NULL:

SQL Server OPENJSON lecture json imbriqué

Personne ne sait si cela est possible et si oui, ce que je fais mal?

source d'informationauteur Slade | 2016-05-13