SQL Server 2016'da ayrıştırmak istediğim bir jsonum var. Projeler-> Yapılar-> Özellikler'in hiyerarşi yapısı var. Ben bütün hiyerarşi ayrıştırır bir sorgu yazmak istiyorum ama ben böyle bir şey yapmak istemiyorum yani indeks sayısına göre herhangi elemanları belirtmek istemiyorum:SQL Server OPENJSON yuvalanmış json oku
openjson (@json, '$[0]')
veya
openjson (@json, '$.structures[0]')
Üst düzey proje nesnelerinin değerlerini, aşağıdaki yapıları temsil eden json dizgisi ile birlikte okuyabildiğim ve daha sonra ayrı ayrı çözümlenebileceği düşüncesindeydim. Sorun aşağıdaki kod çalışmaz olmasıdır:
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 ve Adı sorun geri verilmesinde ama nedense ben 'yapıların' düzenlenen iç içe json alınamıyor. Bunun yerine json içeriğinin sadece döner NULL:
herkes bu mümkündür ve eğer öyleyse, ne yanlış yapıyorum olmadığını biliyor mu?