Você pode concatenar sem o loop através de algo como abaixo; basta adicionar sua própria consulta/junções etc, conforme necessário:
DECLARE @s varchar(max) = ''
SELECT @s = @s + '<br/><b>' + CONVERT(varchar(10), i.CreatedDate, 101) + '</b>' + ISNULL(i.Notes, '')
FROM @Items i
SELECT @s
(você deve verifique se não há
NULL
está lá) mas não faça isso!
O banco de dados não o lugar para construir html; não menos importante, abre extremamente às vulnerabilidades XSRF. Eu faria isso na camada de interface do usuário, fazendo uso apropriado das funções de codificação html fornecidas por qualquer plataforma que você esteja usando. A concatenação cega de strings como html está praticamente no mesmo nível da concatenação cega de strings de usuário em TSQL (em vez de usar parâmetros); na melhor das hipóteses a formatação será borked (sem manipulação correcta de
<
, etc) - na pior das hipóteses, você coloca seus usuários em risco direto de ataque.