Suponiendo que tiene este XML en una variable T-SQL, entonces podría usar este fragmento de código:
DECLARE @input XML = '...(your XML here).....'
SELECT
Key1 = Item.value('(key)[1]', 'int'),
Key2 = Item2.value('(key)[1]', 'int'),
ItemValue = Item2.value('(value)[1]', 'varchar(50)')
FROM
@input.nodes('/root/item') AS T(Item)
CROSS APPLY
item.nodes('value/params/item') AS T2(Item2)
Esto me da una salida de:
Key1 Key2 ItemValue
1 1 value
1 2 value2
1 3 value3
2 4 value4
2 5 value5
2 6 value6
El enfoque es el siguiente:
-
toma la lista de
<item>
nodos bajo<root>
como su primera "lista de nodos XML" con el primer.nodes()
método XQuery y extraiga el valor de<key>
elemento XML en ese fragmento XML enKey1
-
tome la lista "anidada" de nodos XML dentro de ese fragmento XML, usando el
value/params/item
XPath, para obtener las filas secundarias y extraer los valores de<key>
y<value>
de esos fragmentos XML secundarios anidados enKey2
yItemValue