Hola de nuevo LUISESPOCH: Creo que el editor concatenó algún caracter extraño antes en el select interno, ya que si lo copias y ejecutas tal cual está marcando el siguiente error:
Mens. 102, Nivel 15, Estado 1, Línea 25
Incorrect syntax near ' '.
Lo único que tenías que hacer es eliminar esos caracteres:
Código SQL:
Ver originalDECLARE @Tabla TABLE (Campo1 VARCHAR(3), Campo2 VARCHAR(50))
INSERT INTO @Tabla VALUES ('001', 'Descripcion1')
INSERT INTO @Tabla VALUES ('001', 'Descripcion2')
INSERT INTO @Tabla VALUES ('001', 'Descripcion3')
INSERT INTO @Tabla VALUES ('002', 'Descripcion1')
INSERT INTO @Tabla VALUES ('002', 'Descripcion2')
INSERT INTO @Tabla VALUES ('002', 'Descripcion3')
SELECT Campo1, LEFT(CamposConcatenados , LEN(CamposConcatenados )-1) AS CamposConcatenados
FROM @Tabla AS extern
CROSS APPLY
(
SELECT Campo2 + ','
FROM @Tabla AS intern
WHERE extern.Campo1 = intern.Campo1
FOR XML PATH('')
) pre_trimmed (CamposConcatenados)
GROUP BY Campo1, CamposConcatenados
El ejemplo funciona perfectamente en SQL Server 2005 y posteriores, no estoy seguro si funciona para 2000, sería cuestión de probar.
En cuanto afectar el rendimiento utilizando funciones, pues sería cuestión de hacer pruebas.
Checa esta liga:
http://www.forosdelweb.com/f87/crear...upando-856024/
Ahí se muestra una función para concatenar registros, en donde se hace de manera recursiva. En lo particular me ha servido bastante, es más sencilla de implementar y hasta la fecha no me ha dado problemas con el servidor, aunque habría que considerar el volumen de información que vas a manejar.
De cualquier manera, haz la prueba para que elijas la opción que más te sirva.
Saludos
Leo.