Ако приемем, че имате своя XML в променлива на SQL Server, наречена @XML
, можете да използвате родния XQuery поддръжка в SQL Server 2005 и по-нови, за да направите това много по-елегантно и ефективно:
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)
Това ми дава резултат от
С XQuery оператори като .nodes()
или .value()
, можете лесно да „накъсате“ XML документ в релационни данни и да ги съхраните, ако е необходимо.
Първото извикване на @xml.nodes('//ConditionSet')
ще получи "псевдо" таблица за всеки съвпадащ възел - така че всеки <ConditionSet>
възел ще бъде върнат в "псевдо" таблицата XT
като колона XC
и след това мога лесно да взема атрибути (или XML елементи) от този XML фрагмент, използвайки XQuery методи като .value()
.
Или дори мога да взема списъка с подвъзли <Condition>
за всеки от тези <ConditionSet>
възли - с помощта на CROSS APPLY
с второ извикване на .nodes()