天天看點

For XML PATH

SQL Server2005提供了一個新查詢文法——For XML PATH(''),這個文法有什麼用呢?想象一下這樣一個查詢需求:有兩個表,班級表A、學生表B,要查詢一個班級裡有哪些學生?針對這個需求,方法有很多。舉例一下兩種:1、Join連接配接;2、For XML PATH('').

為了大家友善體驗效果,附上建立資料庫的代碼:

1.首先最容易想到的就是用Join連接配接

  Join連接配接代碼:

  Join效果圖:

      

For XML PATH

          圖1

  已經基本滿足了之前要的查詢需求,但是感覺不夠直覺,這時候在想,能不能有這樣的效果,就是每個班級為一行,一行中的一列列出所有學生。接下來是今天要講得内容。

2.For XML PATH('')

  先上代碼:

  先上效果圖,之後再詳細講:

For XML PATH

              圖2

  怎麼樣,是不是感覺更直覺了呢?

解釋說明:

  Path('')中的參數如果為'空'(這裡的空是指str.length=0),且所要的列(這裡指Name)中如果沒有額外添加字元(這裡指Name後面的+’,‘   請對照着上面的sql看),則生成Xml格式的字元串,如下圖3:

For XML PATH

                            圖3

也就是說,如果沒有給path參數賦除了空字元串以外的值,生成的xml會是以相應列名為節點的Xml節點(這裡列名是Name,不是Student)。如果給一個非空的字元串,則會以此字元串為節點名稱來生成Xml,如下圖4:

For XML PATH

                            圖4

大家看到了,我在Name後面還加了個空字元串,如果不加這個空字元串會是什麼效果呢?請看圖5:  

  

For XML PATH

              圖5

是以,如果沒有在所要的列中加入額外字元,所得的結果永遠都會有<列名>值</列名>這樣的Xml節點。也就是說如果要自己要的标簽名,需要做兩件事,1.在列名後面加任意字元;2.設定Path中的參數值為你想要的标簽名。

總結:當要查詢一個結果集,結果集裡面首先是一個主表,結果集裡面有一列是主表需要關聯到外表的時候(也就是1對多的情況下),可以用這個文法。這句話不大會表達,大家慢慢琢磨,說的不好的,大家給意見,互相學習,多謝。