我需要连接所有行以在单个字符串中显示 我为其工作的其他表写了相同的查询 这两个查询只给我一个最后一行值
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
答案 0 :(得分:1)
那是因为你的倒数第二个值是NULL,所以它会有效地将参数设置为NULL,然后获取最后剩下的行。
要解决这个问题,你可以使用例如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