SQL Server FOR XML PATH 語句的應用

來源:互聯網
上載者:User

在SQL Server中利用 FOR XML PATH 語句能夠把查詢的資料產生XML資料,下面是它的一些應用樣本。

DECLARE @TempTable table(UserID int , UserName nvarchar(50));insert into @TempTable (UserID,UserName) values (1,'a')insert into @TempTable (UserID,UserName) values (2,'b') select UserID,UserName from @TempTable FOR XML PATH
運行這段指令碼,將產生如下結果:
<row>  <UserID>1</UserID>  <UserName>a</UserName></row><row>  <UserID>2</UserID>  <UserName>b</UserName></row>
大家可以看到兩行資料產生了兩個節點,修改一下PATH的參數:
select UserID,UserName from @TempTable FOR XML PATH('lzy')

再次運行上述指令碼,將產生如下的結果:

<lzy>  <UserID>1</UserID>  <UserName>a</UserName></lzy><lzy>  <UserID>2</UserID>  <UserName>b</UserName></lzy>
可以看到節點變成,其實PATH() 括弧內的參數是控制節點名稱的,這樣的話大家可以看一下如果是Null 字元串(不是沒有參數)會是什麼結果?
select UserID,UserName from @TempTable FOR XML PATH('')

執行上面這段指令碼將產生結果:

<UserID>1</UserID><UserName>a</UserName><UserID>2</UserID><UserName>b</UserName>

這樣就不顯示上級節點了,大家知道在 PATH 模式中,列名或列別名被作為 XPath 運算式來處理,也就是說,是列的名字,這樣大膽實驗一下不給指定列名和別名會是怎麼樣?

select CAST(UserID AS varchar) + '',UserName + '' from @TempTable FOR XML PATH('')

 

運行上面這句將產生結果

1a2b

所有資料都產生一行,而且還沒有串連字元,這樣的資料可能對大家沒有用處,還可以再變化一下:

select CAST(UserID AS varchar) + ',',UserName + '',';' from @TempTable FOR XML PATH('')

 

產生結果

1,a;2,b;

大家現在明白了吧,可以通過控制參數來產生自己想要的結果,例如:

 

select '{' + CAST(UserID AS varchar) + ',','"' +UserName + '"','}' from @TempTable FOR XML PATH('')

 

產生結果

{1,"a"}{2,"b"}

還可以產生其他格式,大家可以根據自己需要的格式進行組合。

下面是一個資料統計的應用,希望大家可以通過下面的執行個體想到更多的應用

 

DECLARE @T1 table(UserID int , UserName nvarchar(50),CityName nvarchar(50));insert into @T1 (UserID,UserName,CityName) values (1,'a','上海')insert into @T1 (UserID,UserName,CityName) values (2,'b','北京')insert into @T1 (UserID,UserName,CityName) values (3,'c','上海')insert into @T1 (UserID,UserName,CityName) values (4,'d','北京')insert into @T1 (UserID,UserName,CityName) values (5,'e','上海') SELECT B.CityName,LEFT(UserList,LEN(UserList)-1) FROM (SELECT CityName,    (SELECT UserName+',' FROM @T1 WHERE CityName=A.CityName  FOR XML PATH('')) AS UserListFROM @T1 A GROUP BY CityName) B

 

產生結果(每個城市的使用者名稱)

北京 b,d
上海 a,c,e

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.