SQL Server中如何为FOR XML PATH生成的结果列设置别名
正确设置别名的写法
你可以将FOR XML PATH的整个查询作为子表达式放在外层SELECT的列定义位置,直接指定别名即可:
写法1(推荐,避免特殊字符转义)
加TYPE关键字和value方法可以自动处理拼接时产生的XML特殊字符转义问题:
SELECT ( SELECT Comment FROM Comments WHERE ID = 1006 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') AS Comment_Agg
写法2(简化版,无特殊字符时可用)
如果确认Comment字段没有<、>、&这类XML特殊字符,可以直接简化为:
SELECT ( SELECT Comment FROM Comments WHERE ID = 1006 FOR XML PATH('') ) AS Comment_Agg
原有写法报错原因
- 第一种直接在
FOR XML PATH('')后加别名的写法不符合语法规则:FOR XML是SQL Server查询的结果集修饰符,作用是修改整个查询的输出格式,不属于普通列,不能直接后跟别名。 - 第二种将
FOR XML查询作为子查询从其取数的写法错误:经过FOR XML修饰的查询不会返回标准的带列结构的结果集,外层SELECT * AS 别名的语法不支持对这类结果集做别名定义。
可选优化方案
如果你使用的是SQL Server 2017及更高版本,无需使用FOR XML PATH实现多行拼接,可以直接用原生的STRING_AGG函数,语法更简洁:
SELECT STRING_AGG(Comment, '') AS Comment_Agg FROM Comments WHERE ID = 1006
内容的提问来源于stack exchange,提问作者user9532692
相关产品推荐
相关产品推荐

