2010-12-09 310 views
6

我想选择一组数据到一个单独的字符串中,但我仍然希望每个项目都在它自己的行上(然后我将它放在Crystal Reports中,并且它将比使用大量的子报表快。)SQL Server - 如何合并字符串并添加换行符?

所以,我有以下数据:

ID Assessor 
1 Black 
1 Jones 

,我想查询它,并返回一个字符串,它看起来像:

Black 
Jones 

,如果我做一个选择使用聚结,我可以做它用逗号或分号分隔,但不是换行符分隔的:

BEGIN 
    declare @Assessors NVarChar(max) 
    Declare @LineFeed varchar(10) 
    DECLARE @Return varchar(10) 
    Set @LineFeed = char(10) 
    SET @Return = char(13) 

    Select @Assessors = COALESCE(@Assessors + ', ', '') + a.Assessor 
    FROM dbo.Assessment a 
    Where (@ID = a.ID) 

Return @Assessors 
END 

因此,该函数将返回'Black,Jones'。但如果我改变线

Select @Assessors = COALESCE(@Assessors + @Return + @LineFeed, '') + a.Assessor 

它返回'黑琼斯' - 它不放在换行或返回,只是一个空间。

我想我不必使用Coalesce,但我已经试过了标准连接,并且不会将它放在任何一个中。我现在已经有了这个功能,但是打算将它作为存储过程的一部分,所以速度更快。

回答

7

CHAR(13)+CHAR(10)会产生换行符,我在生产代码中一直这样做。

我运行了你的代码,它在我的系统上产生换行符。在SSMS中,从“结果到网格”将您的视图切换到“结果到文本”,您将看到换行符。

1

使用CHAR函数插入:

标签 炭(9)

换行 CHAR(10)

回车符 炭(13)

+1

+1。这让我想起了VB字符串处理的旧时代:-) – 2010-12-09 18:39:11