求助:如何在SQL Server 2014中实现string_agg查询功能?
在SQL Server 2014中替代
STRING_AGG的XML实现方案 没问题!我来帮你搞定SQL Server 2014里的字符串聚合需求——毕竟2014版本还没引入STRING_AGG,用XML拼接是当时最靠谱的替代方法,我给你拆解清楚:
完整替代查询
把你原来的STRING_AGG语句换成下面这段:
SELECT STUFF( (SELECT ',' + CAST(t.id AS VARCHAR(MAX)) FROM Table t FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '' ) AS id;
逐部分解释
我给你拆解每个环节的作用,这样你就能明白为啥这么写:
FOR XML PATH(''):这一步会把查询到的每个id前面加个逗号,然后拼接成一段没有根节点的XML字符串。比如你的表id是1、2、3,这部分会生成,1,2,3(注意开头多了个逗号)。TYPE:加上这个关键字,会让结果以XML类型返回,而不是默认的普通字符串。这很重要,因为它能自动处理像&、<这类XML特殊字符,避免拼接后出现乱码或者转义错误。.value('.', 'VARCHAR(MAX)'):把XML类型的内容转换回普通的字符串格式,这样我们就能得到带开头逗号的聚合字符串。STUFF(..., 1, 1, ''):最后用STUFF函数把开头的那个多余逗号删掉,就得到了和STRING_AGG完全一样的结果:1,2,3。
注意事项
- 如果你的
id是数值类型(比如INT),一定要用CAST或CONVERT转换成字符串类型,不然拼接的时候会报错。 - 如果你的数据里有XML特殊字符(比如
&),这个方法比早期不用TYPE的写法更可靠,因为它会正确处理转义,最终输出的字符和原数据一致。
内容的提问来源于stack exchange,提问作者xMilos
相关产品推荐
相关产品推荐

