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()