如何将现有MySQL查询代码改写为可在MS-SQL Server运行的等效代码
MS-SQL 适配修改方案
核心语法替换点
- 替换MySQL特有函数
GROUP_CONCAT为MS-SQL 2017及以上版本支持的STRING_AGG函数,需额外指定分隔符、用WITHIN GROUP子句指定排序规则 - 替换MySQL分页语法
LIMIT 1为MS-SQL的TOP 1语法,放置在最外层查询的SELECT后 - 适配MS-SQL严格的
GROUP BY校验:内层子查询分组时需将所有非聚合查询列加入分组条件
适配后完整代码
SELECT TOP 1 t2.gname FROM ( SELECT SUM(t1.strength) AS sst, STRING_AGG(t1.name, ',') WITHIN GROUP (ORDER BY t1.name) AS gname FROM ( SELECT a.name, a.strength, STRING_AGG(d.zone, ',') WITHIN GROUP (ORDER BY d.zone) AS zones FROM Animals a INNER JOIN Details d ON a.id = d.id GROUP BY a.id, a.name, a.strength ) t1 GROUP BY t1.zones ) t2 ORDER BY t2.sst DESC;
低版本兼容说明
如果使用的是SQL Server 2016及更早版本,不支持STRING_AGG函数,可替换为FOR XML PATH写法实现字符串拼接功能。
内容的提问来源于stack exchange,提问作者Anjali
相关产品推荐
相关产品推荐

