Pozadie Mám kolónu XML v my SQL tabuľky (pomocou SQL Server). Každý uzol má rôzne množstvo metadát. Napríklad v príklade nižšie, Krok Číslo 1 má iba "Nie" ako metadáta, zatiaľ čo, Krok Číslo 2 okrem toho má 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>
Očakávaný Výstup
Chcel by som, aby tento výpis metadáta dynamicky a zároveň uchopením hodnotu. Pre vyššie uvedený príklad, to by vyzerať ako nižšie uvedená tabuľka. Dôležitejšie je, že by to nemalo ohľadu na to, koľko značiek metadát existuje, chcem to prejsť všetky z nich. Niektoré z mojich údajov má 10+ značiek.
Uzol | Krok | Kľúč | Hodnota |
---|---|---|---|
Krok | 1 | Hodnota | Krok Číslo 1 |
Krok | 2 | RBuffer | 6000 |
Krok | 2 | Hodnota | Krok Číslo 2 |
Krok | 3 | Makro | 5 |
Krok | 3 | Hodnota | Krok Číslo 3 |
Práce tak ďaleko
Tak ďaleko, bol som schopný extrahovať metadáta v statickej spôsobom:
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)
Ktoré poskytuje nasledujúca tabuľka:
Krok | Makro | RBuffer | Akcia |
---|---|---|---|
1 | NULL | NULL | Krok Číslo 1 |
2 | NULL | 6000 | Krok Číslo 2 |
3 | 5 | NULL | Krok Číslo 3 |
Ale ja som explicitne volať každú hodnotu a vytváranie stĺpcov v tomto smere nie je merateľné. Akúkoľvek pomoc, chcel by som byť ocenil. Som relatívne nový druh údajov munging v SQL, takže vysvetlenia kód by byť užitočné.