Microsoft SQL Server Utilizzo di FOR XML PATH per concatenare i valori


Esempio

Il FOR XML PATH può essere utilizzato per concatenare i valori in stringa. L'esempio seguente concatena i valori in una stringa CSV :

DECLARE @DataSource TABLE
(
    [rowID] TINYINT
   ,[FirstName] NVARCHAR(32)
);

INSERT INTO @DataSource ([rowID], [FirstName])
VALUES (1, 'Alex')
      ,(2, 'Peter')
      ,(3, 'Alexsandyr')
      ,(4, 'George');

SELECT STUFF
(
    (
        SELECT ',' + [FirstName]
        FROM @DataSource
        ORDER BY [rowID] DESC
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,1
    ,''
);

Poche note importanti:

  • la clausola ORDER BY può essere utilizzata per ordinare i valori in un modo preferito
  • se si utilizza un valore più lungo come separatore della concatenazione, anche il parametro della funzione STUFF deve essere modificato;
SELECT STUFF
(
    (
        SELECT '---' + [FirstName]
        FROM @DataSource
        ORDER BY [rowID] DESC
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,3 -- the "3" could also be represented as: LEN('---') for clarity
    ,''
);
  • come l'opzione TYPE e la funzione .value vengono utilizzate, la concatenazione funziona con la stringa NVARCHAR(MAX)