Förutsatt att du har din XML i en SQL Server-variabel som heter @XML
, kan du använda den native XQuery stöd i SQL Server 2005 och nyare för att göra detta mycket mer elegant och effektivt:
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)
Detta ger mig en utdata av
Med XQuery-operatorer som .nodes()
eller .value()
, kan du enkelt "shara" ett XML-dokument till relationsdata och lagra det efter behov.
Det första anropet till @xml.nodes('//ConditionSet')
kommer att få en "pseudo"-tabell för varje matchande nod - så varje <ConditionSet>
noden kommer att returneras i "pseudo"-tabellen XT
som kolumn XC
, och sedan kan jag enkelt ta attribut (eller XML-element) från det XML-fragmentet med XQuery-metoder som .value()
.
Eller så kan jag till och med ta tag i listan över undernoder <Condition>
för var och en av dessa <ConditionSet>
noder - med CROSS APPLY
med ett andra anrop till .nodes()