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
查詢結果: