Ervan uitgaande dat u uw XML in een SQL Server-variabele hebt met de naam @XML , kunt u de native XQuery . gebruiken ondersteuning in SQL Server 2005 en nieuwer om dit veel eleganter en efficiënter te doen:
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)
Dit geeft me een output van

Met XQuery-operators zoals .nodes() of .value() , kunt u eenvoudig een XML-document "versnipperen" in relationele gegevens en deze indien nodig opslaan.
De eerste aanroep naar @xml.nodes('//ConditionSet') krijgt een "pseudo"-tabel voor elk overeenkomend knooppunt - dus elke <ConditionSet> node wordt geretourneerd in de "pseudo"-tabel XT als kolom XC , en dan kan ik gemakkelijk attributen (of XML-elementen) uit dat XML-fragment halen met behulp van XQuery-methoden zoals .value() .
Of ik kan zelfs de lijst met subknooppunten <Condition> . pakken voor elk van die <ConditionSet> knooppunten - met behulp van de CROSS APPLY met een tweede aanroep naar .nodes()