Supponendo che tu abbia il tuo XML in una variabile di SQL Server chiamata @XML
, puoi utilizzare la XQuery nativa supporto in SQL Server 2005 e versioni successive per farlo in modo molto più elegante ed efficiente:
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)
Questo mi dà un output di
Con operatori XQuery come .nodes()
o .value()
, puoi facilmente "distruggere" un documento XML in dati relazionali e archiviarli secondo necessità.
La prima chiamata a @xml.nodes('//ConditionSet')
otterrà una tabella "pseudo" per ogni nodo corrispondente, quindi ogni <ConditionSet>
il nodo verrà restituito nella tabella "pseudo" XT
come colonna XC
, e quindi posso facilmente acquisire attributi (o elementi XML) da quel frammento XML utilizzando metodi XQuery come .value()
.
Oppure posso anche prendere l'elenco dei sottonodi <Condition>
per ciascuno di questi <ConditionSet>
nodi - utilizzando il CROSS APPLY
con una seconda chiamata a .nodes()