sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2008:Omdøbe et element ved hjælp af XML DML?

Som man siger, "Hvor der er en vilje, er der en vej"

Her er to metoder: den første er simpelthen at erstatte den tidligere xml med en ny xml konstrueret ud fra originalen med det nye elementnavn. I mit eksempel har jeg ændret ben/ben til lemmer/lemmer, dette kunne blive meget kompliceret for alt andet end det enkleste skema

Og for det andet en mere passende tilgang til at kombinere indsæt og slet.

Jeg har kombineret dem til et enkelt eksempel:

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;


  1. Samlet funktion i MySQL - liste (som LISTAGG i Oracle)

  2. Måling af faktisk MySQL-forespørgselstid

  3. Sådan hentes billeder fra MySQL-database og vises i et html-tag

  4. medarbejderafdelingsmæssigt og antal medarbejdere mere end 5