sql >> Databáze >  >> RDS >> Sqlserver

Jak Stuff a 'For Xml Path' fungují v SQL Server?

Funguje to takto:

1. Získejte řetězec prvků XML pomocí FOR XML

Přidání FOR XML PATH na konec dotazu vám umožní výstup výsledků dotazu jako prvků XML s názvem prvku obsaženým v argumentu PATH. Pokud bychom například spustili následující příkaz:

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

Předáním prázdného řetězce (FOR XML PATH('')) získáme místo toho následující:

,aaa,bbb,ccc,ddd,eee

2. Odstraňte úvodní čárku pomocí STUFF

Příkaz STUFF doslova "nacpe" jeden řetězec do druhého a nahradí znaky v prvním řetězci. My jej však používáme pouze k odstranění prvního znaku z výsledného seznamu hodnot.

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

Parametry STUFF jsou:

  • Řetězec, který má být „vyplněn“ (v našem případě úplný seznam jmen s úvodní čárkou)
  • Místo pro zahájení mazání a vkládání znaků (1, vkládáme do prázdného řetězce)
  • Počet znaků k odstranění (1, což je úvodní čárka)

Takže skončíme s:

aaa,bbb,ccc,ddd,eee

3. Připojte se na ID a získejte úplný seznam

Dále se k tomu připojíme na seznamu ID v dočasné tabulce, abychom získali seznam ID s názvem:

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;

A máme výsledek:

ID Jméno 1aaa,bbb,ccc,ddd,eee

Doufám, že to pomůže!



  1. Webinář:Bankovnictví na Postgres – úvahy o finanční aplikaci [Následovat]

  2. Zobrazení obrázku v Ireports pomocí PostgreSql

  3. Ukládání dat:REST vs. POSIX pro archivy a HSM

  4. Žádné mapování dialektu pro typ JDBC:2003