Supondo que você tenha esse XML em uma variável T-SQL - então você pode usar este trecho 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)
Isso me dá uma saída de:
Key1 Key2 ItemValue
1 1 value
1 2 value2
1 3 value3
2 4 value4
2 5 value5
2 6 value6
A abordagem é a seguinte:
-
pegue a lista de<item>
nós em<root>
como sua primeira "lista de nós XML" com o primeiro.nodes()
XQuery e extraia o valor do<key>
Elemento XML nesse fragmento XML emKey1
-
pegue a lista "aninhada" de nós XML dentro desse fragmento XML, usando ovalue/params/item
XPath, para obter as linhas filhas - e extrair os valores de<key>
e<value>
desses fragmentos XML filho aninhados emKey2
eItemValue