请求排查SQL查询语句语法错误:提示‘(’附近语法不正确
嘿,咱们来一步步排查这个问题!系统提示(附近语法错误,大概率是两个原因之一:
1. SQL Server版本不兼容
STRING_AGG函数是SQL Server 2017及以后版本才正式引入的,而且带WITHIN GROUP (ORDER BY ...)的排序语法也是该版本才支持的。如果你的数据库版本低于2017,数据库根本不认识这个函数和语法,自然会报语法错误。
2. 版本没问题?试试格式调整(可能性较低)
如果你的版本确实是2017或更高,你给出的语句语法其实是正确的,但有时候格式混乱(比如符号前后缺失空格)可能导致编辑器误判,你可以试试调整成更清晰的格式:
SELECT StateProvince, STRING_AGG(AddressID, ',') WITHIN GROUP (ORDER BY AddressID) AS AggregatedAddressIDs FROM [SalesLT].[Address] GROUP BY StateProvince;
如果是版本不够的问题,那咱们用传统的FOR XML PATH方法来实现同样的效果,这个方法兼容所有较新的SQL Server版本:
SELECT StateProvince, STUFF(( SELECT ',' + CAST(AddressID AS VARCHAR(10)) FROM [SalesLT].[Address] a2 WHERE a2.StateProvince = a1.StateProvince ORDER BY AddressID FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS AggregatedAddressIDs FROM [SalesLT].[Address] a1 GROUP BY StateProvince;
简单解释下这个老方法:通过子查询用FOR XML PATH把每个StateProvince下的AddressID拼接成带逗号的字符串,再用STUFF去掉开头多余的逗号。
内容的提问来源于stack exchange,提问作者Abhijeet Raj




