SQL Server OPENJSON Lesen verschachtelten json

Habe ich einige json, ich möchte analysieren in der SQL Server-2016. Es gibt eine Hierarchie, Struktur, Projekte->Strukturen->Eigenschaften. Ich möchte eine Abfrage schreiben, die analysiert die gesamte Hierarchie, aber ich will nicht angeben, werden alle Elemente von index-Nummer ie ich nicht wollen, etwas zu tun wie dieser:

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

oder

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

Hatte ich diese Idee, dass ich konnte Lesen Sie die Werte der top-level-Projekt-Objekte zusammen mit den json-string für die Strukturen darunter, die könnte dann analysiert werden, getrennt. Das problem ist, dass der folgende code nicht funktioniert:

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 und Name zurückgegeben, kein problem, aber für einige Grund, warum ich nicht bekommen kann die geschachtelte json statt in 'Strukturen'. Anstelle der json-Inhalte, die es nur gibt NULL zurück:

SQL Server OPENJSON Lesen verschachtelten json

Weiß jemand, ob dies möglich ist und wenn ja, was mache ich falsch?

InformationsquelleAutor der Frage Slade | 2016-05-13

Schreibe einen Kommentar