You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将STRING_AGG替换为STUFF函数适配SQL Server 2016及以下版本

用STUFF替代STRING_AGG适配SQL Server 2016及以下版本

SQL Server 2016及更早版本不支持STRING_AGG函数,可通过STUFF结合FOR XML PATH实现相同的字符串拼接效果,以下是具体修改方案:

一、针对原查询的修改

将原查询中的STRING_AGG子查询替换为STUFF + FOR XML PATH写法,保留原逻辑:

SELECT
    (
        STUFF(
            (
                SELECT ',' + d.Name
                FROM (
                    SELECT div.name, MHLId 
                    FROM MsrtProfile mp 
                    INNER JOIN Division div ON mp.DivisionId = div.Id 
                    WHERE mp.mhlid = ph.potentialHospitalNo  
                    GROUP BY div.Name, MHLId
                ) d
                FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'),
            1, 1, ''
        )
    ) AS divisionnames
FROM xyz ph

逻辑说明:

  • FOR XML PATH(''):将查询结果拼接成无XML标签的字符串,生成带前置逗号的临时串(如,div1,div2)
  • STUFF(...,1,1,''):移除字符串开头多余的第一个逗号
  • TYPE.value('.', 'NVARCHAR(MAX)'):避免特殊字符(如<>&)被转义为XML实体

二、针对示例表的具体实现

根据你提供的Hospital和Division表结构,按hospitalId关联并拼接DivisionName的SQL如下:

SELECT
    STUFF(
        (
            SELECT ',' + div.DivisionName
            FROM Division div
            WHERE div.hospitalId = h.hospitalId
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'),
        1, 1, ''
    ) AS DivisionName
FROM Hospital h

输出结果:

DivisionName
-------------
d1,d2
d3

内容的提问来源于stack exchange,提问作者coder rock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:35:25