जैसा कि कहा जाता है, "जहाँ चाह है वहाँ राह है"
यहां दो विधियां दी गई हैं: पहला यह है कि पिछले एक्सएमएल को नए तत्व नाम के साथ मूल से निर्मित एक नए एक्सएमएल के साथ प्रतिस्थापित करना है। मेरे उदाहरण में मैंने पैर/पैर को अंग/अंग में बदल दिया है, यह किसी भी चीज़ के लिए बहुत जटिल हो सकता है लेकिन सबसे सरल स्कीमा
और दूसरी बात, इन्सर्ट और डिलीट के संयोजन का अधिक उपयुक्त तरीका।
मैंने उन्हें एक साधारण उदाहरण में संयोजित किया है:
declare @xml as xml = '<animal species="Mouse">
<legs>
<leg>Front Right</leg>
<leg>Front Left</leg>
<leg>Back Right</leg>
<leg>Back Left</leg>
</legs>
</animal>'
set @xml = (select
t.c.value('@species', 'varchar(max)') as '@species'
,(select
ti.C.value('.', 'varchar(max)')
from @Xml.nodes('//animal/legs/leg') ti(c) for xml path('limb'), /* root('limb'), */type) as limbs
from @xml.nodes('//*:animal') t(c) for xml path('animal'), type)
select @xml;
while (@xml.exist('/animal/limbs/limb') = 1) begin
/*insert..*/
set @xml.modify('
insert <leg>{/animal/limbs/limb[1]/text()}</leg>
before (/animal/limbs/limb)[1]
');
/*delete..*/
set @xml.modify('delete (/animal/limbs/limb)[1]');
end
set @xml.modify('
insert <legs>{/animal/limbs/leg}</legs>
before (/animal/limbs)[1]
');
set @xml.modify('delete (/animal/limbs)[1]');
select @xml;