For XML PATH

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   ar   for   資料   2014   

原文:For XML PATH

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

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

--班級表create table T_Class(CNo int primary key not null identity,--班級編號CName nvarchar(50) not null           --班級名稱         )go--學生表create table T_Student(SNo int primary key not null identity,--學生編號Name nvarchar(50) not null    ,       --學生姓名CNo int not null                      --所屬班級)go

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

  Join串連代碼:

SELECTCName ,Name FROM T_Class c JOIN T_Student s ONs.CNo = c.CNo

  Join:

      

          圖1

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

2.For XML PATH(‘‘)

  先上代碼:

SELECT CNo,
    CName,
    (SELECT Name+‘,‘ FROM dbo.T_Student s WHERE s.CNo=c.CNo For XML Path(‘‘)) AS Student  --單獨一列 ,所有學生在同一列中
FROM T_Class c

  先上,之後再詳細講:

      

              圖2

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

解釋說明:

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

                            圖3

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

                            圖4

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

  

              圖5

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

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

For XML PATH

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.