Разгледайте тези статии:
http://dataeducation.com/rowset-string-concatenation- кой-метод-е-най-добър/
http:// www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/ (Вижте решението за кръстосано свързване на Phil Factor в отговорите - което ще работи в SQL Server 2000)
Очевидно в SQL Server 2005 трикът FOR XML е най-лесният, най-гъвкавият и като цяло най-производителният.
Що се отнася до връщането на набор от редове за всеки ред, ако все пак искате да направите това по някаква причина, можете да го направите в съхранена процедура, но клиентът ще трябва да консумира всички редове в първия набор от редове и след това да премине към следващия набор от редове и да го свържете с първия ред в първия набор от редове и т.н. Вашият SP ще трябва да отвори курсор върху същия набор, който е върнал като първия набор от редове, и да изпълни множество селекции последователно, за да генерира всички дъщерни набори от редове. Това е техника, която съм правил, но само където ВСИЧКИ данните действително са били необходими (например в напълно попълнен дървовиден изглед).
И независимо от това какво казват хората, правенето му от страна на клиента често е много голяма загуба на честотна лента, тъй като връщането на всички редове и извършването на цикъл и прекъсване от страна на клиента означава, че огромен брой идентични колони се прехвърлят в началото на всеки ред само за да получите променящата се колона в края на реда.
Където и да го направите, това трябва да е информирано решение въз основа на вашесто случай на употреба.