Echa un vistazo a estos artículos:
http://dataeducation.com/rowset-string-concatenation- cuál-método-es-el-mejor/
http:// www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ (Consulte la solución de unión cruzada de Phil Factor en las respuestas, que funcionará en SQL Server 2000)
Obviamente, en SQL Server 2005, el truco FOR XML es el más fácil, el más flexible y, en general, el más eficaz.
En cuanto a devolver un conjunto de filas para cada fila, si aún desea hacerlo por algún motivo, puede hacerlo en un procedimiento almacenado, pero el cliente deberá consumir todas las filas en el primer conjunto de filas y luego pasar al siguiente. conjunto de filas y asociarlo con la primera fila en el primer conjunto de filas, etc. Su SP necesitaría abrir un cursor en el mismo conjunto que devolvió como el primer conjunto de filas y ejecutar selecciones múltiples en secuencia para generar todos los conjuntos de filas secundarios. Es una técnica que he hecho, pero solo donde TODOS los datos realmente eran necesarios (por ejemplo, en una vista de árbol completa).
E independientemente de lo que diga la gente, hacerlo del lado del cliente es a menudo una gran pérdida de ancho de banda, porque devolver todas las filas y hacer el bucle e interrumpir el lado del cliente significa que se transfiere una gran cantidad de columnas idénticas al comienzo de cada fila solo para obtener la columna cambiante al final de la fila.
Dondequiera que lo haga, debe ser una decisión informada basado en su caso de uso.