Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como ler xml em t-sql?


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 em Key1

  • pegue a lista "aninhada" de nós XML dentro desse fragmento XML, usando o value/params/item XPath, para obter as linhas filhas - e extrair os valores de <key> e <value> desses fragmentos XML filho aninhados em Key2 e ItemValue