Sql server 如何在SQL Server中将记录集转换为分隔字符串

Sql server 如何在SQL Server中将记录集转换为分隔字符串,sql-server,Sql Server,是否有方法转换单列记录集,例如 1 2 3 在SQL Server中转换为“1,2,3”字符串 联合是一种很好的方法 注意:stuff函数只是从结果字符串中删除第一个逗号。我已经成功地使用下面的Coalesce创建了一个函数。然后可以使用select语句中的函数来获取分隔字符串。(您可以向函数中添加参数,并根据需要在coalesce select语句中使用它们。) 我知道我可以使用光标来实现这一点,但我想知道是否有其他方法。这必须在sql级别完成,还是您可以在消费端以编程方式处理这一点?使用

是否有方法转换单列记录集,例如

1
2
3

在SQL Server中转换为“1,2,3”字符串

联合是一种很好的方法


注意:stuff函数只是从结果字符串中删除第一个逗号。

我已经成功地使用下面的Coalesce创建了一个函数。然后可以使用select语句中的函数来获取分隔字符串。(您可以向函数中添加参数,并根据需要在coalesce select语句中使用它们。)


我知道我可以使用光标来实现这一点,但我想知道是否有其他方法。这必须在sql级别完成,还是您可以在消费端以编程方式处理这一点?使用
FOR XML PATH
或在
SELECT
中指定一个变量:这可能的重复是完美的。谢谢你的帮助。等等,如果我想合并到一个不同于myTable的表上呢?是否要为每个表创建一个函数,以避免不必记住合并或xml路径?(我自己更喜欢合并,但那是因为我经常使用它,xml path方法是一种非常合理的方法。)创建一个SP可以做到这一点(多表/多列连接),但在我看来,即使这样,它似乎只是试图隐藏实际发生的事情)(打字错误,今天大脑中出现了xmp,所以所有东西都是xmp_路径这个和xmp_路径那个,更正)Xml路径工作,但会自动将任何特殊字符转换为其实体引用(例如&been&;)这可能是不可取的。此外,如果需要,您可以在函数中使用相当复杂的select语句。是的,您必须为其他表创建一个新函数,因此这也可能不是所有情况下的最佳解决方案。此外,如果您希望分隔字符串是函数中多个列之一,则函数解决方案效果最佳你的输出。
DECLARE @Out VARCHAR(2048)
Select @Out = COALESCE(@Out + ', ', '') + [YourColumn] from YourTable

print @Out
select stuff( (select ',' + YourColumn
               from YourTable
               for xml path('')), 1, 1, '')
CREATE FUNCTION [dbo].[fn_MyFunction]
(
)
RETURNS NVARCHAR(MAX)
AS
BEGIN

    DECLARE @str NVARCHAR(MAX)

    DECLARE @Delimiter CHAR(2) 
    SET @Delimiter = ', '

    SELECT @str = COALESCE(@str + @Delimiter,'') + AColumn
    FROM dbo.myTable

    RETURN RTRIM(LTRIM(@str))

END