SQL中 FOR XML PATH 函数用法
假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:
FOR XML PATH 简单介绍
--按XML格式输出查询结果
select * from dbo.Hobby for xml path
--自定义XML行节点名称
select * from dbo.Hobby for xml path('MyHobby')
--自定义XML列节点名称
select hobbyId as 'MyCode', hName as 'MyName' from dbo.Hobby for xml path('MyHobby')
--对字符串类型字段自定义输出格式
SELECT '[ '+hName+' ]' FROM dbo.Hobby FOR XML PATH('')
--对其他类型的列自定义输出格式:将它们转换成字符串格式
select '{'+STR(hobbyId)+'}','[ '+hName+' ]' FROM dbo.Hobby FOR XML PATH('')
查询结果:
1 <!--按XML格式输出查询结果-->
2 <row>
3 <hobbyId>1</hobbyId>
4 <hName>爬山</hName>
5 </row>
6 <row>
7 <hobbyId>2</hobbyId>
8 <hName>游泳</hName>
9 </row>
10 <row>
11 <hobbyId>3</hobbyId>
12 <hName>美食</hName>
13 </row>
14
15 <!--自定义XML行节点名称-->
16 <MyHobby>
17 <hobbyId>1</hobbyId>
18 <hName>爬山</hName>
19 </MyHobby>
20 <MyHobby>
21 <hobbyId>2</hobbyId>
22 <hName>游泳</hName>
23 </MyHobby>
24 <MyHobby>
25 <hobbyId>3</hobbyId>
26 <hName>美食</hName>
27 </MyHobby>
28
29 <!--自定义XML列节点名称-->
30 <MyHobby>
31 <MyCode>1</MyCode>
32 <MyName>爬山</MyName>
33 </MyHobby>
34 <MyHobby>
35 <MyCode>2</MyCode>
36 <MyName>游泳</MyName>
37 </MyHobby>
38 <MyHobby>
39 <MyCode>3</MyCode>
40 <MyName>美食</MyName>
41 </MyHobby>
42
43 <!--对字符串类型字段自定义输出格式-->
44 [ 爬山 ][ 游泳 ][ 美食 ]
45
46 <!--对其他类型的列自定义输出格式-->
47 { 1}[ 爬山 ]{ 2}[ 游泳 ]{ 3}[ 美食 ]
FOR XML PATH 简单应用
增加一张学生表,列分别为(stuId,sName,hName),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好,表结构如下:
以“爱好1,爱好2,爱好3...”的格式显示数据
--显示所有学生的爱好的结果集
select A.sName,
(select hName+',' from dbo.StudentHobby
where sName=A.sName for xml path('')) as hobbyList
from dbo.StudentHobby A
group by A.sName
--去除逗号显示
select b.sName, left(B.hobbyList, len(B.hobbyList)-1) as StuHobby from (
select A.sName,
(select hName+',' from dbo.StudentHobby
where sName=A.sName for xml path('')) as hobbyList
from dbo.StudentHobby A
group by A.sName
)B
查询结果: