概述
FOR XML PATH (‘XML’),一般使用于SELECT语句末尾,使结果集转为XML文档形式,其中每一行对应一个XML父节点,XML为父节点名称,字段名为子节点名称。
示例
--学生表
SELECT 编号,姓名,年龄,兴趣 FROM STUDENT
编号 姓名 年龄 兴趣
10001 小红 6 唱歌
10001 小红 6 跳舞
10002 小明 6 唱歌
10002 小明 6 跳舞
10003 小王 6 唱歌
10003 小王 6 跳舞
--使用FOR XML PATH
SELECT 编号,姓名,年龄,兴趣 FROM STUDENT
FOR XML PATH ('XML'), TYPE
--结果
<XML><编号>10001</编号><姓名>小红</姓名><年龄>6</年龄><兴趣>唱歌</兴趣></XML>
<XML><编号>10001</编号><姓名>小红</姓名><年龄>6</年龄><兴趣>跳舞</兴趣></XML>
<XML><编号>10002</编号><姓名>小明</姓名><年龄>6</年龄><兴趣>唱歌</兴趣></XML>
<XML><编号>10002</编号><姓名>小明</姓名><年龄>6</年龄><兴趣>跳舞</兴趣></XML>
<XML><编号>10003</编号><姓名>小王</姓名><年龄>6</年龄><兴趣>唱歌</兴趣></XML>
<XML><编号>10003</编号><姓名>小王</姓名><年龄>6</年龄><兴趣>跳舞</兴趣></XML>
使用自定义定义节点名称
SELECT 编号 AS 学号,姓名,年龄,兴趣 AS 特长 FROM STUDENT
FOR XML PATH ('一三班'), TYPE
--结果
<一三班><学号>10001</学号><姓名>小红</姓名><年龄>6</年龄><特长>唱歌</特长></一三班>
<一三班><学号>10001</学号><姓名>小红</姓名><年龄>6</年龄><特长>跳舞</特长></一三班>
<一三班><学号>10002</学号><姓名>小明</姓名><年龄>6</年龄><特长>唱歌</特长></一三班>
<一三班><学号>10002</学号><姓名>小明</姓名><年龄>6</年龄><特长>跳舞</特长></一三班>
<一三班><学号>10003</学号><姓名>小王</姓名><年龄>6</年龄><特长>唱歌</特长></一三班>
<一三班><学号>10003</学号><姓名>小王</姓名><年龄>6</年龄><特长>跳舞</特长></一三班>
配合其他函数使用
SELECT 编号,姓名,年龄,
STUFF((SELECT ','+兴趣 FROM STUDENT s where s.编号=stu.编号 FOR XML PATH ('')),1,1,'') AS stu --使用自定义列名,节点名,STUFF函数
FROM STUDENT stu
GROUP BY 编号,姓名,年龄
--结果
编号 姓名 年龄 stu
10001 小红 6 唱歌,跳舞
10002 小明 6 唱歌,跳舞
10003 小王 6 唱歌,跳舞