SQL中 FOR XML PATH 函数用法
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
2 <row>
3 <hobbyId>1hobbyId>
4 <hName>爬山hName>
5 row>
6 <row>
7 <hobbyId>2hobbyId>
8 <hName>游泳hName>
9 row>
10 <row>
11 <hobbyId>3hobbyId>
12 <hName>美食hName>
13 row>
14
15
16 <MyHobby>
17 <hobbyId>1hobbyId>
18 <hName>爬山hName>
19 MyHobby>
20 <MyHobby>
21 <hobbyId>2hobbyId>
22 <hName>游泳hName>
23 MyHobby>
24 <MyHobby>
25 <hobbyId>3hobbyId>
26 <hName>美食hName>
27 MyHobby>
28
29
30 <MyHobby>
31 <MyCode>1MyCode>
32 <MyName>爬山MyName>
33 MyHobby>
34 <MyHobby>
35 <MyCode>2MyCode>
36 <MyName>游泳MyName>
37 MyHobby>
38 <MyHobby>
39 <MyCode>3MyCode>
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
查询结果: