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

Hvordan fungerer Stuff og 'For XML Path' i SQL Server?

Sådan fungerer det:

1. Hent XML-elementstreng med FOR XML

Tilføjelse af FOR XML PATH til slutningen af ​​en forespørgsel giver dig mulighed for at udlæse resultaterne af forespørgslen som XML-elementer med elementnavnet indeholdt i PATH-argumentet. For eksempel, hvis vi skulle køre følgende sætning:

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

Ved at indsætte en tom streng (FOR XML PATH('')), får vi i stedet følgende:

,aaa,bbb,ccc,ddd,eee

2. Fjern indledende komma med STUFF

STUFF-sætningen "stopper" bogstaveligt talt en streng ind i en anden, og erstatter tegn i den første streng. Vi bruger den imidlertid blot til at fjerne det første tegn i den resulterende liste over værdier.

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

Parametrene for STUFF er:

  • Den streng, der skal "fyldes" (i vores tilfælde den fulde liste over navne med aleading komma)
  • Placeringen for at begynde at slette og indsætte tegn (1, vi propper i en tom streng)
  • Antallet af tegn, der skal slettes (1, er det indledende komma)

Så vi ender med:

aaa,bbb,ccc,ddd,eee

3. Tilmeld dig på id for at få den fulde liste

Dernæst slutter vi os bare til dette på listen over id i temp-tabellen for at få en liste over ID'er med navn:

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;

Og vi har vores resultat:

Id Navn 1aaa,bbb,ccc,ddd,eee

Håber dette hjælper!



  1. Brent Ozar forklarer SQL Server intern og ekstern fragmentering

  2. Sammenlign fire førende database-IDE-værktøjer

  3. ORA-01460:uimplementeret eller urimelig konvertering anmodet

  4. ATAN2() Funktion i Oracle