如何在不使用参数的情况下从结果集中获取逗号分隔的结果。
如何在不使用参数的情况下从结果集中获取逗号分隔的结果?
有很多不同的方法可以实现这个目标,而在SQL中循环通常并不是一个好主意。最简单的方法是编写一个存储过程,通过迭代结果集并在除最后一行外的所有行末尾添加逗号和空格。
为什么要这么做?简单的研究就会发现有更好的方法,并且这个问题每天都被问到多次。
下面是一种可能的解决方法:
DECLARE @Result VARCHAR(MAX) = '' SELECT @Result = @Result + ColumnName + ', ' FROM TableName SET @Result = LEFT(@Result, LEN(@Result) - 1) SELECT @Result
这个解决方法使用一个变量来保存逗号分隔的结果。首先,我们将变量初始化为空字符串。然后,我们通过迭代结果集的每一行,并将每个列的值与逗号和空格组合起来,添加到变量中。最后,我们使用LEFT函数将最后一个逗号和空格去除掉,并返回结果。
请注意,这只是一种可能的解决方案,具体的实现方式可能会根据具体的情况而有所不同。但是,通过使用这种方法,我们可以在不使用参数的情况下从结果集中获取逗号分隔的结果。
在没有使用参数的情况下,如何从结果集中获取逗号分隔的结果?
问题的原因是作者想要在不使用声明变量或参数的情况下,在单个查询中实现这个目标。
解决方法是使用STUFF函数将查询结果进行逗号分隔,并去除第一个逗号。
以下是使用参数的解决方法(性能更好):
DECLARE @result VARCHAR(max) SELECT @result = COALESCE(@result + ', ', '') + FirstName + ' ' + LastName FROM table_of_Names WHERE NameType='game show host' SELECT @result
以下是不使用参数的解决方法(性能较差):
SELECT STUFF((SELECT ','+ FirstName + ' ' + LastName FROM table_of_Names WHERE NameType='game show host' FOR XML PATH(''), TYPE).value('.', 'varchar(max)'), 1, 1, '') as NameList
作者对第一个解决方法进行了肯定的评价,认为它比包含STUFF函数的方法要快得多。但需要注意的是,无论哪种方法,实际执行计划都会给出更准确的性能评估。
总之,作者通过提出问题并给出两种解决方法,帮助读者实现了从结果集中获取逗号分隔的结果的需求。