sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo leer xml en t-sql?

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

  • 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 en Key2 y ItemValue