FOR XML PATH 详解
FOR XML PATH 可以将查询结果根据行输出成 XML 格式。先看看我们的表结构和数据。
使用 FOR XML PATH:
SELECT [学号]
,[姓名]
,[性别]
,[出生日期]
,[民族]
,[所属班级]
,[家庭住址]
FROM [学生成绩管理系统].[dbo].[学生信息] FOR XML PATH
GOCode language: CSS (css)
我们可以看到 for xml path 其实就是把每一条记录转换成 xml 的格式输出,每一行的标签使用 row,每一个属性使用列名:
<row>
<学号>2005010101</学号>
<姓名>苏俊丹 </姓名>
<性别>女 </性别>
<出生日期>1987-01-12</出生日期>
<民族>汉族 </民族>
<所属班级>20050101 </所属班级>
<家庭住址>河南商丘</家庭住址>
</row>
<row>
<学号>2005010102</学号>
<姓名>张苗苗 </姓名>
<性别>女 </性别>
<出生日期>1985-05-15</出生日期>
<民族>汉族 </民族>
<所属班级>20050101 </所属班级>
<家庭住址>河南洛阳</家庭住址>
</row>Code language: HTML, XML (xml)
可以改变这个 row 的名称:
SELECT [学号]
,[姓名]
,[性别]
,[出生日期]
,[民族]
,[所属班级]
,[家庭住址]
FROM [学生成绩管理系统].[dbo].[学生信息] FOR XML PATH('行')
GOCode language: JavaScript (javascript)
<行>
<学号>2005010101</学号>
<姓名>苏俊丹 </姓名>
<性别>女 </性别>
<出生日期>1987-01-12</出生日期>
<民族>汉族 </民族>
<所属班级>20050101 </所属班级>
<家庭住址>河南商丘</家庭住址>
</行>
<行>
<学号>2005010102</学号>
<姓名>张苗苗 </姓名>
<性别>女 </性别>
<出生日期>1985-05-15</出生日期>
<民族>汉族 </民族>
<所属班级>20050101 </所属班级>
<家庭住址>河南洛阳</家庭住址>
</行>Code language: HTML, XML (xml)
如果传入空字符,则输出:
<学号>2005010101</学号>
<姓名>苏俊丹 </姓名>
<性别>女 </性别>
<出生日期>1987-01-12</出生日期>
<民族>汉族 </民族>
<所属班级>20050101 </所属班级>
<家庭住址>河南商丘</家庭住址>
<学号>2005010102</学号>
<姓名>张苗苗 </姓名>
<性别>女 </性别>
<出生日期>1985-05-15</出生日期>
<民族>汉族 </民族>
<所属班级>20050101 </所属班级>
<家庭住址>河南洛阳</家庭住址>Code language: HTML, XML (xml)
也可以通过使用 as 对字段名进行转义,这样标签名也会变:
SELECT [学号] as number
,[姓名] as name
,[性别] as sex
FROM [学生成绩管理系统].[dbo].[学生信息] FOR XML PATH('myrow')
GOCode language: JavaScript (javascript)
<myrow>
<number>2005010101</number>
<name>苏俊丹 </name>
<sex>女 </sex>
</myrow>
<myrow>
<number>2005010102</number>
<name>张苗苗 </name>
<sex>女 </sex>
</myrow>Code language: HTML, XML (xml)
另外,也可以使用 + 号来改变格式:
SELECT '['+[学号]+']'
FROM [学生成绩管理系统].[dbo].[学生信息] FOR XML PATH('myrow')
GOCode language: JavaScript (javascript)
<myrow>[2005010101]</myrow>
<myrow>[2005010102]</myrow>
<myrow>[2005010201]</myrow>
<myrow>[2005010202]</myrow>
<myrow>[2005020101]</myrow>
<myrow>[2005020102]</myrow>
<myrow>[2005020201]</myrow>
<myrow>[2005020202]</myrow>
<myrow>[2005030101]</myrow>
<myrow>[2005030102]</myrow>
<myrow>[2005040101]</myrow>
<myrow>[2005040102]</myrow>
<myrow>[2005040201]</myrow>
<myrow>[2005040202]</myrow>
<myrow>[2005050101]</myrow>
<myrow>[2005050102]</myrow>
<myrow>[2005050201]</myrow>
<myrow>[2005050202]</myrow>Code language: HTML, XML (xml)
甚至可以这样:
SELECT '['+[学号]+']'
FROM [学生成绩管理系统].[dbo].[学生信息] FOR XML PATH('')
GOCode language: JavaScript (javascript)
[2005010101][2005010102][2005010201][2005010202]
[2005020101][2005020102][2005020201][2005020202]
[2005030101][2005030102][2005040101][2005040102]
[2005040201][2005040202][2005050101]
[2005050102][2005050201][2005050202]Code language: JSON / JSON with Comments (json)
应用示例
select
c.学生编号,
(
SELECT ','+ ltrim(rtrim(Convert(nvarchar(30),分数)))
FROM [dbo].[成绩信息] c2
WHERE c2.学生编号 = c.学生编号
FOR XML PATH('')
) as 分数情况
from [dbo].[成绩信息] as c
group by c.学生编号Code language: JavaScript (javascript)