Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come leggere xml in t-sql?

Supponendo che tu abbia questo XML in una variabile T-SQL, puoi usare questo frammento di codice:

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)

Questo mi dà un output di:

Key1  Key2  ItemValue
 1     1     value
 1     2     value2
 1     3     value3
 2     4     value4
 2     5     value5
 2     6     value6  

L'approccio è il seguente:

  • prendi l'elenco di <item> nodi in <root> come primo "elenco di nodi XML" con il primo .nodes() XQuery ed estrarre il valore di <key> Elemento XML in quel frammento XML in Key1

  • prendi l'elenco "nidificato" di nodi XML all'interno di quel frammento XML, usando il value/params/item XPath, per ottenere le righe figlie ed estrarre i valori da <key> e <value> da quei frammenti XML figlio nidificati in Key2 e ItemValue