无法将多行连接成单个文本字符串 sql 服务器 2008

Unable to Concatenate many rows into a single text string sql server 2008

如果没有 XML 函数,还有其他方法可以做到这一点吗?我试过关注 Concatenate many rows into a single text string? 我在 SQL Server 2008 R2 上尝试 运行 时遇到问题。

将 varchar 值“,”转换为数据类型 int 时转换失败。

Select distinct ST2.id 
    substring(
        (
            Select ','+ST1.id AS [text()]
            From dbo.idstable ST1
            Where ST1.id = ST2.id
            ORDER BY ST1.id
            For XML PATH ('')
        ), 2, 1000) [idstable]
From dbo.idstable ST2

语法错误的原因是 DISTINCT 之后的无关列名。下面是一个类似的方法,它使用 STUFFTYPE 来避免字符串中的特殊字符出现问题。

SELECT DISTINCT
    STUFF(
        (
            SELECT ','+CAST(ST1.id AS varchar(10)) AS [text()]
            FROM dbo.idstable ST1
            WHERE ST1.id = ST2.id
            ORDER BY ST1.id
            FOR XML PATH (''), TYPE
        ).value('.', 'nvarchar(MAX)'), 1, 1, '') [Students]
FROM dbo.idstable ST2;

旧 SQL 版本支持的聚合字符串连接的另一种方法是游标。

就目前而言,Dan 的回答是正确的。从性能的角度来看,最好在子查询中执行 distinct(并且可能在外部查询中包含 id

SELECT id
       STUFF( (SELECT ',' + CAST(ST1.id AS varchar(10)) AS [text()]
               FROM dbo.idstable ST1
               WHERE ST1.id = ST2.id
               ORDER BY ST1.id
               FOR XML PATH (''), TYPE
              ).value('.', 'nvarchar(MAX)'
                     ), 1, 1, '') as [Students]
FROM (SELECT DISTINCT id dbo.idstable) ST2;