sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008:de naam van een element wijzigen met XML DML?

Zoals het gezegde luidt:"Waar een wil is, is een weg"

Hier zijn twee methoden: de eerste is om eenvoudig de vorige xml te vervangen door een nieuwe xml die is opgebouwd uit het origineel met de nieuwe elementnaam. In mijn voorbeeld heb ik Benen/Been veranderd in Ledematen/Limb. Dit kan heel ingewikkeld worden voor alles behalve het eenvoudigste schema

En ten tweede een meer geschikte benadering van het combineren van invoegen en verwijderen.

Ik heb ze gecombineerd tot één eenvoudig voorbeeld:

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. GROUP BY tijdstempel elke 15 minuten inclusief ontbrekende vermeldingen

  2. Query voegt alles samen in één rij in plaats van in afzonderlijke rijen

  3. gebruik mysql ingebed met qt?

  4. PHP-array opslaan in MySQL?