En supposant que vous ayez votre XML dans une variable SQL Server appelée @XML
, vous pouvez utiliser le XQuery natif prise en charge dans SQL Server 2005 et versions ultérieures pour le faire de manière beaucoup plus élégante et efficace :
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)
Cela me donne une sortie de
Avec les opérateurs XQuery comme .nodes()
ou .value()
, vous pouvez facilement "déchiqueter" un document XML en données relationnelles et les stocker selon vos besoins.
Le premier appel à @xml.nodes('//ConditionSet')
obtiendra une "pseudo" table pour chaque nœud correspondant - donc chaque <ConditionSet>
le noeud sera retourné dans la "pseudo" table XT
comme colonne XC
, puis je peux facilement récupérer des attributs (ou des éléments XML) à partir de ce fragment XML en utilisant des méthodes XQuery comme .value()
.
Ou je peux même saisir la liste des sous-nœuds <Condition>
pour chacun de ces <ConditionSet>
nœuds - en utilisant le CROSS APPLY
avec un second appel à .nodes()