国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

使用Microsoft SQL Server 2000的XML查詢

2024-08-31 00:51:12
字體:
來源:轉載
供稿:網(wǎng)友

  由于xml本身的諸多優(yōu)點,XML技術已被廣泛的使用,目前的好多軟件技術同XML緊密相關,比如微軟的。net 平臺對xml提供了強大的支持,提供System.Xml以及其子命名空間下的類型來操作xml.Ado.net通過核心類型DataSet出色的把關系型數(shù)據(jù)庫同xml進行了緊密集成。由于平常許多開發(fā)人員使用。net 來操作Sql server的到數(shù)據(jù)集后再轉換成xml,所以往往忽略Transact-SQL查詢生成XML數(shù)據(jù)的強大功能。對于一些項目使用XML查詢直接通過SQL生成xml會來的更為簡便,所以我通過在實際項目中的使用和查閱一些資料寫成一個知識點,一是溫故而知新,二是對于一些開發(fā)者剛好需要這方面的技術而還沒有找到比較快捷的學習方式提供一條途徑。

  在SQL SERVER 2000中查詢生成XML的語法表達式比較簡潔,整個語法如下:

  SELECT <;select_list>

  FROM <;table_source>

  WHERE <;search_condition>

  FOR XML AUTO | RAW | EXPLICIT [,XMLDATA ] [,ELEMENTS] [,BINARY BASE64]

  下面我將以Northwind數(shù)據(jù)庫來演示上面的表達式中所包含的各項功能,下面的查詢語句和返回結果都通過SQL SERVER 2000查詢分析器來執(zhí)行和得到。

  一。 使用AUTO模式

  該模式我認為在生成單表xml數(shù)據(jù)方面是用得最多的,能滿足一般的需要。先來看他的簡單查詢。

  1.簡單查詢

  查詢語句:

  SELECT CategoryID,

  CategoryName

  FROM Categories

  WHERE CategoryID <; 3 FOR XML AUTO

  返回結果:

  <;Categories CategoryID="1" CategoryName="Beverages"/>

  <;Categories CategoryID="2" CategoryName="Condiments"/>

  也可以使用別名,

  查詢語句:

  SELECT CategoryID AS ID,

  CategoryName,

  GetDate() as CurrDate

  FROM Categories MyTable

  WHERE CategoryID <; 3 FOR XML AUTO

  返回結果:

  <;MyTable ID="1" CategoryName="Beverages" CurrDate="2005-06-24T11:09:52.937"/>

  <;MyTable ID="2" CategoryName="Condiments" CurrDate="2005-06-24T11:09:52.937"/>

  2.連接查詢

  以兩個表為例,

  查詢語句:

  SELECT Categories.CategoryID,

  Categories.CategoryName,

  PRoductID,

  ProductName

  FROM Categories

  JOIN Products ON Categories.CategoryID = Products.CategoryID AND ProductID <;5

  WHERE Categories.CategoryID <; 3 FOR XML AUTO

  返回結果:

  <;Categories CategoryID="1" CategoryName="Beverages">

  <;Products ProductID="1" ProductName="Chai"/>

  <;/Categories>

  <;Categories CategoryID="2" CategoryName="Condiments">

  <;Products ProductID="2" ProductName="Chang"/>

  <;/Categories>

  可以看到表連接查詢可以生成分層次的Xml,不過需要注意的是SELECT子句中的父表的列要排在子表的列的前面,否則會出現(xiàn)你不想看到的結果,如:

  查詢語句:

  SELECT ProductID,Categories.CategoryID,Categories.CategoryName,ProductName

  FROM Categories

  JOIN Products ON Categories.CategoryID = Products.CategoryIDand ProductID <;5

  WHERE Categories.CategoryID <;3FOR XML AUTO

  返回結果:

  <;Products ProductID="1" ProductName="Chai">

  <;Categories CategoryID="1" CategoryName="Beverages"/>

  <;/Products>

  <;Products ProductID="2" ProductName="Chang">

  <;Categories CategoryID="1" CategoryName="Beverages"/>

  <;/Products>

  <;Products ProductID="3" ProductName="Aniseed Syrup">

  <;Categories CategoryID="2" CategoryName="Condiments"/>

  <;/Products>

  <;Products ProductID="4" ProductName="Chef Anton&apos;s Cajun Seasoning">

  <;Categories CategoryID="2" CategoryName="Condiments"/>

  <;/Products>

  3.使用ELEMENTS選項

  使用該選項可以生成以元素為中心的Xml表示,默認為屬性方式,不過屬性方式節(jié)省空間。需要注意的是使用ELEMENTS選項是一種全是或全否的形式,不能得到一部分是以元素表示而另一部分以屬性表示的Xml數(shù)據(jù)。

  查詢語句:

  SELECT CategoryID,

  CategoryName

  FROM Categories

  WHERE CategoryID <; 3

  FOR XML AUTO, ELEMENTS

  返回結果:

  <;Categories>

  <;CategoryID>1<;/CategoryID>

  <;CategoryName>Beverages<;/CategoryName>

  <;/Categories>

  <;Categories>

  <;CategoryID>2<;/CategoryID>

  <;CategoryName>Condiments<;/CategoryName>

  <;/Categories>

  在連接查詢時,

  查詢語句:

  SELECT Categories.CategoryID,

  ProductID,

  ProductName

  FROM Categories

  JOIN Products ON Categories.CategoryID = Products.CategoryIDand ProductID <;4

  WHERE Categories.CategoryID <;3FOR XML AUTO, ELEMENTS

  返回結果:

  <;Categories>

  <;CategoryID>1<;/CategoryID>

  <;Products>

  <;ProductID>1<;/ProductID>

  <;ProductName>Chai<;/ProductName>

  <;/Products>

  <;Products>

  <;ProductID>2<;/ProductID>

  <;ProductName>Chang<;/ProductName>

  <;/Products>

  <;/Categories>

  <;Categories>

  <;CategoryID>2<;/CategoryID>

  <;Products>

  <;ProductID>3<;/ProductID>

  <;ProductName>Aniseed Syrup<;/ProductName>

  <;/Products>

  <;/Categories>

  4.檢索對二進制數(shù)據(jù)的XPath引用

  這是對二進制數(shù)據(jù)的操作,

  查詢語句:

  SELECT CategoryID,

  Picture

  FROM Categories

  WHERE CategoryID = 1

  FOR XML AUTO

  返回結果:

  <;Categories CategoryID="1" Picture="dbobject/Categories[@CategoryID='1']/@Picture"/>

  使用ELEMENTS方式,

  查詢語句:

  SELECT CategoryID,

  Picture

  FROM Categories

  WHERE CategoryID = 1

  FOR XML AUTO,ELEMENTS

  返回結果:

  <;Categories>

  <;CategoryID>1<;/CategoryID>

  <;Picture>dbobject/Categories[@CategoryID='1']/@Picture<;/Picture>

  <;/Categories>

  二。使用RAW模式

  使用RAW模式不能使用ELEMENTS選項。

  1.簡單查詢

  查詢語句:

  SELECT CategoryID,

  CategoryName AS Nanme

  FROM Categories

  WHERE CategoryID <; 3

  ORDER BY CategoryID DESC

  FOR XML RAW

  返回結果:

  <;row CategoryID="2" Nanme="Condiments"/>

  <;row CategoryID="1" Nanme="Beverages"/>

  2.連接查詢

  查詢語句:

  SELECT Categories.CategoryID,

  Categories.CategoryName,

  ProductID,

  ProductName

  FROM Categories

  JOIN Products ON Categories.CategoryID = Products.CategoryIDand ProductID <;4

  WHERE Categories.CategoryID <;= 2FOR XML RAW

  返回結果:

  <;row CategoryID="1" CategoryName="Beverages" ProductID="1" ProductName="Chai"/>

  <;row CategoryID="1" CategoryName="Beverages" ProductID="2" ProductName="Chang"/>

  <;row CategoryID="2" CategoryName="Condiments" ProductID="3" ProductName="Aniseed Syrup"/>


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 梨树县| 芷江| 会昌县| 蛟河市| 松潘县| 海口市| 察隅县| 多伦县| 贵州省| 康保县| 金昌市| 屯留县| 木兰县| 漳浦县| 广汉市| 大关县| 固始县| 大竹县| 古蔺县| 乐平市| 盖州市| 牡丹江市| 鄢陵县| 富阳市| 达尔| 白沙| 新乐市| 塘沽区| 衡阳县| 凤翔县| 抚顺市| 连州市| 丹阳市| 长武县| 收藏| 沙田区| 和政县| 富平县| 罗定市| 芦溪县| 定兴县|