Za předpokladu, že máte svůj XML v SQL Server proměnné s názvem @XML
, můžete použít nativní XQuery podporu v SQL Server 2005 a novějších, abyste to udělali mnohem elegantněji a efektivněji:
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)
To mi dává výstup
S operátory XQuery, jako je .nodes()
nebo .value()
, můžete snadno „skartovat“ dokument XML na relační data a uložit je podle potřeby.
První volání @xml.nodes('//ConditionSet')
získá "pseudo" tabulku pro každý odpovídající uzel - takže každý <ConditionSet>
uzel bude vrácen v "pseudo" tabulce XT
jako sloupec XC
a pak mohu snadno získat atributy (nebo prvky XML) z tohoto fragmentu XML pomocí metod XQuery, jako je .value()
.
Nebo mohu dokonce uchopit seznam poduzlů <Condition>
pro každý z těchto <ConditionSet>
uzly - pomocí CROSS APPLY
s druhým voláním .nodes()