将所有行连接成单个字符串

时间:2014-08-25 11:16:25

标签: sql-server sql-server-2008 sql-server-2008-r2

我需要连接所有行以在单个字符串中显示 我为其工作的其他表写了相同的查询 这两个查询只给我一个最后一行值

   declare @varaibelName nvarchar(max)
    set @cpx=''
    Select  @varaibelName=COALESCE(@varaibelName,'')+  FeildName From TableName
    select @varaibelName

 declare @varaibelName nvarchar(max)
    set @varaibelName=''
    Select  @varaibelName=@varaibelName+ FeildName From TableName  
    select @varaibelName

1 个答案:

答案 0 :(得分:1)

那是因为你的倒数第二个值是NULL,所以它会有效地将参数设置为NULL,然后获取最后剩下的行。

See fiddle here for example.

要解决这个问题,你可以使用例如ISNULL来准备null,就像这样(用小提琴代替SQL,看看会发生什么):

declare @variableName nvarchar(max)
Select  @variableName=COALESCE(@variableName,'')+  ISNULL(FieldName,'') From TableName
select @variableName

更好的是,您可能希望将列彼此分开,因此您可以在它们之间添加逗号,然后从字符串末尾解析额外的逗号:

declare @variableName nvarchar(max)
Select  @variableName=COALESCE(@variableName,'')+  ISNULL(FieldName+', ','') From TableName
select @variableName = SUBSTRING(@variableName, 1, LEN(@variableName)-1)
select @variableName

修改

HoneyBadger在下面的评论中是绝对正确的。因为我有一个关于COALESCE的大脑日,所以不妨用这个来避免毫无意义地使用两者:

declare @variableName nvarchar(max) set @variableName = ''
Select  @variableName= @variableName + ISNULL(FieldName+', ','') From TableName
select @variableName = SUBSTRING(@variableName, 1, LEN(@variableName)-1)
select @variableName