Angenommen, Sie haben Ihr XML in einer SQL Server-Variable namens @XML
, können Sie die native XQuery verwenden Unterstützung in SQL Server 2005 und neuer, um dies viel eleganter und effizienter zu tun:
DECLARE @XML XML = '...(your XML here).....'
SELECT
RootID = @xml.value('(/Root/@ID)[1]', 'int'),
ConditionSetOperator = XC.value('@Operator', 'varchar(50)'),
ConditionID = XC2.value('@ID', 'int'),
ConditionOperator = XC2.value('@Operator', 'varchar(50)')
FROM
@Xml.nodes('//ConditionSet') AS XT(XC)
CROSS APPLY
xc.nodes('Condition') AS XT2(XC2)
Dies gibt mir eine Ausgabe von
Mit XQuery-Operatoren wie .nodes()
oder .value()
, können Sie ein XML-Dokument ganz einfach in relationale Daten „shreddern“ und diese nach Bedarf speichern.
Der erste Aufruf von @xml.nodes('//ConditionSet')
erhält eine "Pseudo"-Tabelle für jeden übereinstimmenden Knoten - also jeden <ConditionSet>
node wird in der "Pseudo"-Tabelle XT
zurückgegeben als Spalte XC
, und dann kann ich mithilfe von XQuery-Methoden wie .value()
ganz einfach Attribute (oder XML-Elemente) aus diesem XML-Fragment abrufen .
Oder ich kann sogar die Liste der Unterknoten abrufen <Condition>
für jeden dieser <ConditionSet>
Knoten - mit CROSS APPLY
mit einem zweiten Aufruf von .nodes()