2009-05-04 10 views

Respuesta

5

puede concatenar el uso de un 'conjunto' instrucción incrustada en una consulta:

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

print @combined

(Tenga en cuenta que la primera isnull() inicializa la cadena, y el segundo isnull() es especialmente importante si hay alguna posibilidad de nulos en la columna 'valor', porque de lo contrario un único nulo podría eliminar toda la concatenación)

(código editado y explicación después de los comentarios)

+0

sweet! No me di cuenta de que podrías hacer eso. Siempre pensé que configurar y seleccionar funcionaba igual para la tarea. –

+1

es posible que desee convertirlo en "+ ISNULL (valor, '')" porque "+ valor" anulará cualquier parte de la cadena antes de la fila con el valor nulo –

+0

¡tiene razón! no sé cómo me lo perdí ... he editado. – codeulike

2
DECLARE @EmployeeList varchar(100) 

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

SELECT @EmployeeList 

Resultados:

1, 2, 4 
3

Esto sólo funcionará en MSSQL 2005+

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

..one manera de prevenir el extra coma:

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

Solo funciona en SQLServer 2005+, pero sí es un truco divertido. – FlySwat

+0

si solo hubiera una forma elegante de eliminar esa última coma :) – dotjoe

+0

agregó una forma elegante de eliminar esa última coma :) – gordy

0

Esto se basa en la respuesta @codeulike, pero evitará perder la parte de la cadena que se concatena antes de concatenar un "valor" nulo.

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

print @combined 
Cuestiones relacionadas