FOR XML PATH


        FOR XML PATH 方法是用於將查詢結果集以XML形式展示,這樣展示方式的好處不言而喻。現在我要介紹的FOR XML PATH的“另類”用法。

首先,我們先來看看它的正常用法。下圖是我們用到的一張TEST_PERSON表:

用FOR XML PATH方法查詢,SQL語句如下:

SELECT * FROM TEST_PERSON FOR XML PATH

顯示結果如下:

展開結果可以看到如下圖:

神奇吧!!!!細心的同學會注意到這個XML文件的行節點是<row>,如果需求需要改變這個行節點為<animal>,怎么改?看下面的SQL語句你就會知道了。

SELECT * FROM TEST_PERSON FOR XML PATH('animal')

展開結果如下圖:

簡單吧!!!有野心的同學就會說了:既然行節點可以改變,那列節點要改變又該怎么操作呢?很簡單,只要給字段加別名。SQL語句如下:

SELECT ID AS XuHao,NAME AS MyName FROM TEST_PERSON FOR XML PATH('animal')

展開結果如下:

好玩吧!!!古怪的同學就想了:既然行和列都可以自定義,那么是否說我們可以定義我們喜歡的輸出方式呢?!(我們要說的重點就是這)

看如下SQL語句:

SELECT '['+NAME+']' +'    'FROM TEST_PERSON FOR XML PATH('')

展示結果如下:

 

說了這么多,好像只是為了好玩。那么有哪些實際的應用場景中可以用到這個技術呢?

例如:要查詢一個訂單信息,這些信息包括(訂單號+費用名稱+...),而費用我們是存在單獨的一個子表中,且一個訂單不只一筆費用。

接下來我們增加個動物的行為表TEST_HOBBY表,用演示以上效果。TEST_HOBBY表如下:

我們查動物信息(動物名字+動物行為),動物行為存在TEST_HOBBY表中,我們通過ID 關聯,並且一個動物存在多種行為。SQL語句如下:

 SELECT 
 PE.NAME,--取出TEST_PERSON表中的NAME字段
 --通過ID關聯到TEST_HOBBY表,並把這表中各種動物的行為拼接為一個字段返回
 (SELECT ' '+HO.HOBBY_NAME+' ' FROM TEST_HOBBY HO WHERE HO.PARENT_ID=PE.ID FOR XML PATH('')) AS HOBBY 
 FROM TEST_PERSON PE

結果展示如下:

好玩吧,O(∩_∩)O哈哈~

 更多知識可以參考: http://msdn.microsoft.com/zh-cn/library/ms189885.aspx

(今天寫存儲過程時用到了FOR XML PATH方法,所以整理一下FOR XML PATH的知識。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM