sql >> Database >  >> RDS >> Sqlserver

Hoe werken Stuff en 'For XML Path' in SQL Server?

Zo werkt het:

1. XML-elementstring ophalen met FOR XML

Door FOR XML PATH aan het einde van een query toe te voegen, kunt u de resultaten van de query uitvoeren als XML-elementen, met de elementnaam in het PATH-argument. Als we bijvoorbeeld de volgende instructie zouden uitvoeren:

SELECT ',' + name 
              FROM temp1
              FOR XML PATH ('')

Door een lege string in te voeren (FOR XML PATH('')), krijgen we in plaats daarvan het volgende:

,aaa,bbb,ccc,ddd,eee

2. Voorloopkomma verwijderen met STUFF

De STUFF-instructie "vult" letterlijk de ene tekenreeks in de andere, waarbij tekens in de eerste tekenreeks worden vervangen. We gebruiken het echter gewoon om het eerste teken van de resulterende lijst met waarden te verwijderen.

SELECT abc = STUFF((
            SELECT ',' + NAME
            FROM temp1
            FOR XML PATH('')
            ), 1, 1, '')
FROM temp1

De parameters van STUFF zijn:

  • De tekenreeks die moet worden "opgevuld" (in ons geval de volledige lijst met namen met een voorloopkomma)
  • De locatie om te beginnen met het verwijderen en invoegen van tekens (1, we vullen een lege string in)
  • Het aantal tekens dat moet worden verwijderd (1, de eerste komma)

Dus we eindigen met:

aaa,bbb,ccc,ddd,eee

3. Word lid op id om de volledige lijst te krijgen

Vervolgens voegen we dit gewoon toe aan de lijst met id's in de tijdelijke tabel, om een ​​lijst met ID's met naam te krijgen:

SELECT ID,  abc = STUFF(
             (SELECT ',' + name 
              FROM temp1 t1
              WHERE t1.id = t2.id
              FOR XML PATH (''))
             , 1, 1, '') from temp1 t2
group by id;

En we hebben ons resultaat:

ID Naam 1aaa,bbb,ccc,ddd,eee

Ik hoop dat dit helpt!



  1. CURTIME() Voorbeelden – MySQL

  2. Hoe de grootte van de tabellen van een MySQL-database te krijgen?

  3. Een praktisch gebruik van de SQL COALESCE-functie

  4. Wanneer/waarom Cascading gebruiken in SQL Server?