SQl 2005 For XMl 簡單查詢(Raw,Auto,Path模式)(1)

發表于:2012-02-15來源:博客園作者:Perky Su點擊數: 標簽:sql
很多人對Xpath可能比較熟悉,但不知道有沒有直接操作過數據庫,我們都知道 在Sql2005里公支持的幾種查詢有Raw,Auto模式,頁并沒有Path和Elements用法等,如果在2000里使用過 Raw模式的朋友應該知道,是不容易處理查詢結果的,那么在2005里對這一塊做了很好的

  很多人對Xpath可能比較熟悉,但不知道有沒有直接操作過數據庫,我們都知道 在Sql2005里公支持的幾種查詢有Raw,Auto模式,頁并沒有Path和Elements用法等,如果在2000里使用過 Raw模式的朋友應該知道,是不容易處理查詢結果的,那么在2005里對這一塊做了很好的提升

  我先來介紹一下什么是Sql For Xml吧,我們大多時候都會有這種情況,想把表里的數據轉化成Xml格式的,通常我們會使用c#或是Vb程序來轉公,使用Xpath或是XmlDocument等對象來完成,當然這樣是可以的,不過這樣處理起來就會出現很多問題,比如說數據庫變化,如果只有數據變化那方便,寫一個通用的類,每次查詢前更新Xml文件就可以了,但如果出現數據庫結構的變化就會很吃力了,那么有沒有一種方法,把數據在調出數據庫之前就轉化為Xml的呢,這個是當然的,就是我們的For Xml,大家在查詢分析器里做表結果查詢的時候一般是這樣寫的

  我們給大家展示一下我所用到的兩個表吧

  第一個表班級信息表ClassInfo(班級信息表一共三個字段CID 本表ID,Cnumber 班級人數,CName 班級名稱)

  第二個表 生信息表 Students (CID 班級表外鍵,SID學生信息表ID學生的學號就是,SName)

  SELECT CID,Cnumber,CName FROM ClassInfo WHERE CName='博客園一班'

  結果為:

  通常是這種方法,或是再加上個Order BY 什么的,或是像inner join 等查詢的東東,其實我們只要在這條語句上少量的改動一下就可以得到我們想要的Xml數據了,也許 有朋友已經想到了是 For Xml 對就是這樣的

  SELECT CID,Cnumber,CName FROM ClassInfo WHERE CName='博客園一班' FOR xml raw

  這樣查詢得到的結果如下:

  我們如果想看的更清楚的話只要單擊一個就可以得到相應的Xml文件的形式了

  這里應該就是我們想要的Xml文件的形式了,其實就是這么簡單的,我們可以通過Ado的方式 把他查詢得到UI直接使用就OK了,

  我們可以看到我們得到的信息并不完整,沒有學生信息,我們要吧使用一個連接的形式來完成看下面的Sql語句

  SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName

  FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID

  ORDER BY CID FOR xml raw

  復制代碼

  這里我們是查詢所有的學生和所在班級的信息

  結果為:

  raw 的形式是以屬性的方法來顯示字段的,我們還可以使用Auto,Auto是自動 ,它的意思 不用我多說看例子,(字體檢查相關項目)

  我們把上面的代碼修改一下

  SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName

  FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID

  ORDER BY CID FOR xml auto

  復制代碼

  這樣就能得到更為合理的數據,返回的結果如下

代碼

  

  

  

  

  

  

  

  

  

  

  

  我們可以看到這里沒有根結點,當然我們要吧通過Root屬性來完成

  修改Sql語句

代碼

  SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName

  FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID

  ORDER BY CID FOR xml auto ,root('studentInfo')

  返回結果

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97