Arrière-plan J'ai une colonne XML dans ma table SQL (à l'aide de SQL Server). Chaque nœud a une quantité différente de métadonnées. Par exemple, dans l'exemple ci-dessous, Étape Numéro 1 est le seul "Non" comme les métadonnées lors, l'Étape Numéro 2 de 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>
Sortie Attendue
J'aimerais extraire les métadonnées de manière dynamique tout en saisissant la valeur. Pour l'exemple ci-dessus, ce serait semblable à la table ci-dessous. Surtout, il ne devrait pas d'importance combien d'étiquettes de métadonnées, il y a, je veux aller à travers eux tous. Certaines de mes données a+ de 10 balises.
Nœud | Étape | Clé | Valeur |
---|---|---|---|
Étape | 1 | Valeur | Numéro De L'Étape 1 |
Étape | 2 | RBuffer | 6000 |
Étape | 2 | Valeur | L'Étape Numéro 2 |
Étape | 3 | Macro | 5 |
Étape | 3 | Valeur | Numéro De L'Étape 3 |
À ce jour
Jusqu'à présent, j'ai été en mesure d'extraire les métadonnées de manière statique:
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)
Ce qui donne le tableau suivant:
Étape | Macro | RBuffer | Action |
---|---|---|---|
1 | NULL | NULL | Numéro De L'Étape 1 |
2 | NULL | 6000 | L'Étape Numéro 2 |
3 | 5 | NULL | Numéro De L'Étape 3 |
Mais j'ai appeler explicitement chaque valeur et la création de colonnes dans cette voie n'est pas évolutive. Toute aide serait appréciée. Je suis relativement nouveau à ce type de données munging en SQL, donc les explications de code serait utile.