Zo werkt het:
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
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
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:
Ik hoop dat dit helpt!