知方可補不(bu)足~SQL巧用XML PATH來(lai)生成符(fu)合規則的查詢結果集
在查詢后面在
FOR XML PATH可(ke)以(yi)生成XML格式結果集,好好利用(yong)這個技術(shu),可(ke)以(yi)實(shi)現(xian)很多意想不到(dao)的查詢(xun)效果
最簡單的用法:
SELECT USERID,USERNAME FROM DBO.USER_INFO FOR XML PATH
結果類似這樣
<row> <USERID>6</USERID> <USERNAME>ding25901</USERNAME> </row> <row> <USERID>10</USERID> <USERNAME>zhong</USERNAME> </row> <row> <USERID>11</USERID> <USERNAME>yanxunhan</USERNAME> </row>
我們看(kan)到是以(yi)XML格式來顯示(shi)的,注意它(ta)是個字符串,它(ta)只顯示(shi)在一行(xing)上(shang)。
可以為path加個(ge)參(can)數,來改變row節點的名(ming)稱,如
SELECT USERID,USERNAME FROM DBO.USER_INFO FOR XML PATH('zzl')
結果變成了這樣
<zzl> <USERID>6</USERID> <USERNAME>ding25901</USERNAME> </zzl> <zzl> <USERID>10</USERID> <USERNAME>zhong</USERNAME> </zzl>
當(dang)然,發(fa)揮(hui)我(wo)們的想像力,可(ke)能也會出現(xian)這種(zhong)結果
{6,ding25901}{10,zhong}
怎么樣(yang),有點像(xiang)JSON的格式標(biao)準吧,看看代碼:
SELECT TOP 2 '{' + CAST(UserID AS VARCHAR) + ',' , userName + '' , '}' FROM dbo.User_Info FOR XML PATH('')
只要發揮你的(de)想(xiang)像(xiang)力(li),就有你想(xiang)不到的(de)事情(qing)發生,如果沒有xml path,可能我們還要用性(xing)能較低的(de)游(you)標
看(kan)看(kan)這個例(li)子(zi),找出(chu)用戶(hu)地(di)址表中,所有用戶(hu)的所有地(di)址信息(xi):
SELECT B.userid , List FROM ( SELECT userid , ( SELECT c.address + ',' FROM dbo.UserAddress c WHERE c.UserID = a.userid FOR XML PATH('') ) AS List FROM dbo.UserAddress A GROUP BY userid ) B
結果是:
userid addresslist
------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
010E3E9D-67F5-4C25-80A7-0B56D03F3427 日本,中國,
062061EB-61F2-49A3-AA87-7BD5A59F5970 中國,美國,
1A58A662-A3DF-4BEE-B0D0-B0F73846D55B 中東,