2009-05-04 18 views

risposta

5

è possibile concatenare utilizzando un 'set' dichiarazione incorporata in una query:

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + isnull(value,'') 
from simpleTable 

print @combined

(Si noti che il primo IsNull() inizializza la stringa, e il secondo isnull() è particolarmente importante se c'è qualche possibilità di null nella colonna 'value', perché altrimenti un singolo null potrebbe cancellare l'intera concatenazione)

(codice modificato e spiegazione dopo i commenti)

+0

dolce! Non avevo capito che potevi farlo. Ho sempre pensato che set e select funzionassero allo stesso modo per l'assegnazione. –

+1

potresti volerlo rendere "+ ISNULL (value, '')" perché "+ value" annullerà qualsiasi parte della stringa accumulata prima della riga con il valore nullo –

+0

hai ragione! non so come mi sono perso che ... ho modificato. – codeulike

2
DECLARE @EmployeeList varchar(100) 

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 
    CAST(Emp_UniqueID AS varchar(5)) 
FROM SalesCallsEmployees 
WHERE SalCal_UniqueID = 1 

SELECT @EmployeeList 

Risultati:

1, 2, 4 
3

Questo funziona solo in MSSQL 2005+

select value + ',' from simpletable for xml path ('') 

..uno modo per evitare che l'extra virgola:

select case(row_number() over (order by id)) 
when 1 then value else ',' + value end 
from simpletable 
for xml path ('') 
+0

Funziona solo in SQLServer 2005+, ma si tratta di un divertente trucco. – FlySwat

+0

se solo ci fosse un modo lucido per rimuovere l'ultima virgola :) – dotjoe

+0

aggiunto un modo lucido per rimuovere l'ultima virgola :) – gordy

0

Questo è basato sulla risposta @codeulike, ma impedirà di perdere la parte della stringa che viene concatenata prima di concatenare un "valore" nullo.

declare @combined varchar(2000) 
select @combined = isnull(@combined + ', ','') + ISNULL(value,'') 
from simpleTable 

print @combined 
Problemi correlati