2009-05-04 7 views

Répondre

5

Vous pouvez concaténer en utilisant une déclaration intégrée 'set' dans une requête:

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

print @combined

(Notez que la première isnull() initialise la chaîne, et le second isnull() est particulièrement important s'il y a un risque de null dans la colonne 'value', car sinon un seul null pourrait effacer toute la concaténation)

(modifié le code et explication après commentaires)

+0

doux! Je n'avais pas réalisé que tu pouvais faire ça. J'ai toujours pensé que définir et sélectionner fonctionnait de la même manière pour l'affectation. –

+1

vous pourriez vouloir le faire "+ ISNULL (valeur, '')" parce que "+ valeur" annulera toute partie de la chaîne construire avant la ligne avec la valeur nulle –

+0

vous avez raison! Je ne sais pas comment j'ai raté ça ... – codeulike

2
DECLARE @EmployeeList varchar(100) 

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

SELECT @EmployeeList 

Résultats:

1, 2, 4 
3

Cela ne fonctionnera que dans MSSQL 2005+

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

..un façon d'éviter le supplément virgule:

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

Ne fonctionne que dans SQLServer 2005+, mais oui c'est un hack amusant. – FlySwat

+0

si seulement il y avait une manière lisse de supprimer cette dernière virgule :) – dotjoe

+0

ajouté une manière lisse pour enlever cette dernière virgule :) – gordy

0

Ceci est basé sur la réponse @codeulike, mais empêchera de perdre la partie de la chaîne qui est concaténée avant qu'une "valeur" nulle ne soit concaténée.

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

print @combined 
Questions connexes