Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment lire xml en t-sql ?

En supposant que vous ayez ce XML dans une variable T-SQL, vous pouvez alors utiliser cet extrait de code :

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)

Cela me donne une sortie de :

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

L'approche est la suivante :

  • récupérez la liste des <item> nœuds sous <root> comme première "liste de nœuds XML" avec le premier .nodes() Méthode XQuery et extrayez la valeur du <key> Élément XML dans ce fragment XML dans Key1

  • récupérez la liste "imbriquée" des nœuds XML à l'intérieur de ce fragment XML, en utilisant le value/params/item XPath, pour obtenir les lignes enfants - et extraire les valeurs de <key> et <value> de ces fragments XML enfants imbriqués dans Key2 et ItemValue