如何将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
相关产品推荐
相关产品推荐

