Fundal Am un XML coloană în tabel SQL (folosind SQL Server). Fiecare nod are o valoare diferită de metadate. De exemplu, în exemplul de mai jos, Pasul Numărul 1 are numai "Nu" ca metadate în timp ce, Pasul Numărul 2 în plus a RBuffer.
<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>
Temperatura De Ieșire
Aș vrea să extragă aceste metadate dinamic în timp ce, de asemenea, hapsân valoare. Pentru exemplul de mai sus, acest lucru ar arăta ca în tabelul de mai jos. Important, nu contează cât de multe tag-uri de metadate sunt, vreau să trec prin toate acestea. Unele dintre datele mele are 10+ tag-uri.
Nod | Pas | Cheie | Valoarea |
---|---|---|---|
Pas | 1 | Valoarea | Pasul Numărul 1 |
Pas | 2 | RBuffer | 6000 |
Pas | 2 | Valoarea | Pasul Numărul 2 |
Pas | 3 | Macro | 5 |
Pas | 3 | Valoarea | Etapa Cu Numarul 3 |
Munca de până acum
Până acum, am fost capabil de a extrage metadate în mod static:
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)
Care dă următorul tabel:
Pas | Macro | RBuffer | Acțiune |
---|---|---|---|
1 | NULL | NULL | Pasul Numărul 1 |
2 | NULL | 6000 | Pasul Numărul 2 |
3 | 5 | NULL | Etapa Cu Numarul 3 |
Dar trebuie să spunem în mod explicit fiecare valoare și crearea de coloane în acest fel nu este scalabil. Orice ajutor ar fi apreciat. Sunt relativ nou la acest tip de prelucrarea datelor în SQL, astfel încât explicațiile de cod ar fi de ajutor.