Si vous envisagez de faire une fonction que vous faites sur chaque ligne à partir d'une autre requête, il sera vraiment lent, car la fonction doit être appelée pour chaque ligne. Vous devriez travailler avec des ensembles de données à la fois, il fait toutes les lignes en même temps. Ceci est un exemple de la façon de concaténer plusieurs valeurs pour chaque ligne d'une autre requête:
set nocount on;
declare @t table (id int, name varchar(20), x char(1))
insert into @t (id, name, x)
select 1,'test1', 'a' union
select 1,'test1', 'b' union
select 1,'test1', 'c' union
select 2,'test2', 'a' union
select 2,'test2', 'c' union
select 3,'test3', 'b' union
select 3,'test3', 'c'
SELECT p1.id, p1.name,
stuff(
(SELECT
', ' + x
FROM @t p2
WHERE p2.id=p1.id
ORDER BY name, x
FOR XML PATH('')
)
,1,2, ''
) AS p3
FROM @t p1
GROUP BY
id, name
SORTIE:
id name p3
----------- -------------------- -----------
1 test1 a, b, c
2 test2 a, c
3 test3 b, c
@mohamadreza, en fonction de votre commentaire que vous avez l'intention d'envelopper cette http: // stackoverflow. com/questions/2661437/comment-format-tsql-select-sortie-dans-sql-sever/2661475 # 2661475 dans une fonction. Cependant, si vous le faites et que vous l'utilisez dans une liste de sélection d'une requête, ce sera très inefficace. Il existe de bien meilleures façons de gérer cela, voir ma réponse pour un exemple de comment. –