Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie liest man xml in t-sql?

Angenommen, Sie haben dieses XML in einer T-SQL-Variablen - dann könnten Sie dieses Code-Snippet verwenden:

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)

Dies gibt mir eine Ausgabe von:

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

Der Ansatz ist der folgende:

  • holen Sie sich die Liste von <item> Knoten unter <root> als Ihre erste "Liste von XML-Knoten" mit dem ersten .nodes() XQuery-Methode und extrahieren Sie den Wert von <key> XML-Element in diesem XML-Fragment in Key1

  • holen Sie sich die "verschachtelte" Liste von XML-Knoten innerhalb dieses XML-Fragments, indem Sie value/params/item verwenden XPath, um die untergeordneten Zeilen abzurufen – und die Werte aus <key> zu extrahieren und <value> aus diesen verschachtelten untergeordneten XML-Fragmenten in Key2 und ItemValue