Arka plân SQL tablomda bir XML sütunum var (SQL Server kullanarak). Her düğümün farklı miktarda meta verisi vardır. Örneğin, aşağıdaki örnekte, 1 numaralı Adımda meta veri olarak yalnızca "Hayır" bulunurken, 2 numaralı Adımda ayrıca RBuffer bulunur.
<Step No="1" >Step Number 1</Step>
<Step No="2" RBuffer="6000">Step Number 2</Step>
<Step No="3" Macro="5">Step Number 3</Step>
Beklenen Çıktı
Bu meta verileri dinamik olarak ayıklamak ve aynı zamanda değeri yakalamak istiyorum. Yukarıdaki örnekte, bu aşağıdaki tabloya benzeyecektir. Önemli olarak, kaç tane meta veri etiketi olduğu önemli olmamalı, hepsinden geçmesini istiyorum. Bazı verilerimin 10'dan fazla etiketi var.
Düğümlü | Adım | Anahtar | Değer |
---|---|---|---|
Adım | 1 | Değer | Adım Numarası 1 |
Adım | 2 | Rbuffername | 6000 |
Adım | 2 | Değer | Adım Numarası 2 |
Adım | 3 | Makro | 5 |
Adım | 3 | Değer | Adım Numarası 3 |
Şimdiye kadar çalışmak
Şimdiye kadar meta verileri statik bir şekilde çıkarabildim:
SELECT o.value('@No', 'varchar(32)') [Step]
,o.value('@Macro', 'varchar(32)') [Macro]
,o.value('@RBuffer', 'varchar(32)') [RBuffer]
,o.value('(text())[1]', 'varchar(32)') [Action]
FROM [dbo].[dw_mrd_vss_rundetail_stg] S
CROSS APPLY S.[rundata_detail].nodes('Step') xmlData(o)
Bu aşağıdaki tabloyu verir:
Adım | Makro | Rbuffername | Aksiyon |
---|---|---|---|
1 | boş | boş | Adım Numarası 1 |
2 | boş | 6000 | Adım Numarası 2 |
3 | 5 | boş | Adım Numarası 3 |
Ancak her değeri açıkça çağırmam gerekiyor ve bu şekilde sütunlar oluşturmak ölçeklenebilir değil. Herhangi bir yardım takdir edilecektir. Sql'de bu tür veri çiğneme konusunda nispeten yeniyim, bu nedenle kod açıklamaları yararlı olacaktır.