Ich habe einige JSON, die ich in SQL Server 2016 analysieren möchten. Es gibt eine Hierarchie Struktur von Projekte-> Strukturen-> Eigenschaften. Ich möchte eine Abfrage schreiben, die die gesamte Hierarchie analysiert, aber ich will keine Elemente nach Indexnummer angeben, dh ich will nicht so etwas wie dies zu tun:SQL Server OPENJSON lesen verschachtelten JSON
openjson (@json, '$[0]')
oder
openjson (@json, '$.structures[0]')
Ich hatte diese Idee, dass ich die Werte der Top-Level-Projektobjekte zusammen mit der JSON-Zeichenfolge lesen konnte, die die Strukturen darunter darstellt, die dann separat analysiert werden konnten. 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 Namen kein Problem zurück zu bekommen, aber aus irgendeinem Grunde kann ich nicht die verschachtelte json in ‚Strukturen‘ gehalten bekommen. Anstelle des json Inhalt gibt es nur NULL:
Wer weiß, ob dies möglich ist und wenn ja, was mache ich falsch?