Если вы используете SQL Server 2005 или более позднюю версию, вы можете использовать FOR XML PATH ('') для объединения строк.
Это должно делать то, что вы хотите, без необходимости выполнять циклы вручную: edit: исправил SQL для фактической работы (теперь у меня есть доступ к SQL)
SELECT households.id,
STUFF(
(
SELECT '; ' + [firstname] + '|' + lastname AS [text()]
FROM individuals
WHERE individuals.householdID = households.id
FOR XML PATH('')
)
, 1, 2, '' ) -- remove the first '; ' from the string
AS [name]
FROM dbo.households
WHERE (households.id = 10017)
Это довольно близко к формату данных, который вы хотели.
он преобразует данные вXML (без какой-либо фактической разметки XML из-за PATH ('')), а затем присоединяет его обратно к строке заголовка.