熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

使用Microsoft SQL Server 2000的XML查詢

2013-11-15 14:42:45  來源: SQL Server 

  由於XML本身的諸多優點XML技術已被廣泛的使用目前的好多軟件技術同XML緊密相關比如微軟的net 平台對xml提供了強大的支持提供SystemXml以及其子命名空間下的類型來操作通過核心類型DataSet出色的把關系型數據庫同xml進行了緊密集成由於平常許多開發人員使用net 來操作Sql server的到數據集後再轉換成xml所以往往忽略TransactSQL查詢生成XML數據的強大功能對於一些項目使用XML查詢直接通過SQL生成xml會來的更為簡便所以我通過在實際項目中的使用和查閱一些資料寫成一個知識點一是溫故而知新二是對於一些開發者剛好需要這方面的技術而還沒有找到比較快捷的學習方式提供一條途徑
  
  在SQL SERVER 中查詢生成XML的語法表達式比較簡潔整個語法如下
  
  SELECT <select_list>
  
  FROM <table_source>
  
  WHERE <search_condition>
  
  FOR XML AUTO | RAW | EXPLICIT [XMLDATA ] [ELEMENTS] [BINARY BASE]
  
  下面我將以Northwind數據庫來演示上面的表達式中所包含的各項功能下面的查詢語句和返回結果都通過SQL SERVER 查詢分析器來執行和得到
  
   使用AUTO模式
  
  該模式我認為在生成單表xml數據方面是用得最多的能滿足一般的需要先來看他的簡單查詢
  
  簡單查詢
  
  查詢語句
  
  SELECT CategoryID
  
  CategoryName
  
  FROM Categories
  
  WHERE CategoryID < FOR XML AUTO
  
  返回結果
  
  <Categories CategoryID= CategoryName=Beverages/>
  
  <Categories CategoryID= CategoryName=Condiments/>
  
  也可以使用別名
  
  查詢語句
  
  SELECT CategoryID AS ID
  
  CategoryName
  
  GetDate() as CurrDate
  
  FROM Categories MyTable
  
  WHERE CategoryID < FOR XML AUTO
  
  返回結果
  
  <MyTable ID= CategoryName=Beverages CurrDate=T/>
  
  <MyTable ID= CategoryName=Condiments CurrDate=T/>
  
  連接查詢
  
  以兩個表為例
  
  查詢語句
  
  SELECT CategoriesCategoryID
  
  CategoriesCategoryName
  
  ProductID
  
  ProductName
  
  FROM Categories
  
  JOIN Products ON CategoriesCategoryID = ProductsCategoryID AND ProductID <
  
  WHERE CategoriesCategoryID < FOR XML AUTO
  
  返回結果
  
  <Categories CategoryID= CategoryName=Beverages>
  
  <Products ProductID= ProductName=Chai/>
  
  </Categories>
  
  <Categories CategoryID= CategoryName=Condiments>
  
  <Products ProductID= ProductName=Chang/>
  
  </Categories>
  
  可以看到表連接查詢可以生成分層次的Xml不過需要注意的是SELECT子句中的父表的列要排在子表的列的前面否則會出現你不想看到的結果
  
  查詢語句
  
  SELECT ProductIDCategoriesCategoryIDCategoriesCategoryNameProductName
  
  FROM Categories
  
  JOIN Products ON CategoriesCategoryID = ProductsCategoryID and ProductID <
  
  WHERE CategoriesCategoryID < FOR XML AUTO
  
  返回結果
  
  <Products ProductID= ProductName=Chai>
  
  <Categories CategoryID= CategoryName=Beverages/>
  
  </Products>
  
  <Products ProductID= ProductName=Chang>
  
  <Categories CategoryID= CategoryName=Beverages/>
  
  </Products>
  
  <Products ProductID= ProductName=Aniseed Syrup>
  
  <Categories CategoryID= CategoryName=Condiments/>
  
  </Products>
  
  <Products ProductID= ProductName=Chef Anton&aposs Cajun Seasoning>
  
  <Categories CategoryID= CategoryName=Condiments/>
  
  </Products>
  
  使用ELEMENTS選項
  
  使用該選項可以生成以元素為中心的Xml表示默認為屬性方式不過屬性方式節省空間需要注意的是使用ELEMENTS選項是一種全是或全否的形式不能得到一部分是以元素表示而另一部分以屬性表示的Xml數據
  
  查詢語句
  
  SELECT CategoryID
  
  CategoryName
  
  FROM Categories
  
  WHERE CategoryID <
  
  FOR XML AUTO ELEMENTS
  
  返回結果
  
  <Categories>
  
  <CategoryID></CategoryID>
  
  <CategoryName>Beverages</CategoryName>
  
  </Categories>
  
  <Categories>
  
  <CategoryID></CategoryID>
  
  <CategoryName>Condiments</CategoryName>
  
  </Categories>
  
  在連接查詢時
  
  查詢語句
  
  SELECT CategoriesCategoryID
  
  ProductID
  
  ProductName
  
  FROM Categories
  
  JOIN Products ON CategoriesCategoryID = ProductsCategoryID and ProductID <
  
  WHERE CategoriesCategoryID < FOR XML AUTO ELEMENTS
  
  返回結果
  
  <Categories>
  
  <CategoryID></CategoryID>
  
  <Products>
  
  <ProductID></ProductID>
  
  <ProductName>Chai</ProductName>
  
  </Products>
  
  <Products>
  
  <ProductID></ProductID>
  
  <ProductName>Chang</ProductName>
  
  </Products>
  
  </Categories>
  
  <Categories>
  
  <CategoryID></CategoryID>
  
  <Products>
  
  <ProductID></ProductID>
  
  <ProductName>Aniseed Syrup</ProductName>
  
  </Products>
  
  </Categories>
  
  檢索對二進制數據的XPath引用
  
  這是對二進制數據的操作
  
  查詢語句
  
  SELECT CategoryID
  
  Picture
  
  FROM Categories
  
  WHERE CategoryID =
  
  FOR XML AUTO
  
  返回結果
  
  <Categories CategoryID= Picture=dbobject/Categories[@CategoryID=]/@Picture/>
  
  使用ELEMENTS方式
  
  查詢語句
  
  SELECT CategoryID
  
  Picture
  
  FROM Categories
  
  WHERE CategoryID =
  
  FOR XML AUTOELEMENTS
  
  返回結果
  
  <Categories>
  
  <CategoryID></CategoryID>
  
  <Picture>dbobject/Categories[@CategoryID=]/@Picture</Picture>
  
  </Categories>
  
  使用RAW模式
  
  使用RAW模式不能使用ELEMENTS選項
  
  簡單查詢
  
  查詢語句
  
  SELECT CategoryID
  
  CategoryName AS Nanme
  
  FROM Categories
  
  WHERE CategoryID <
  
  ORDER BY CategoryID DESC
  
  FOR XML RAW
  
  返回結果
  
  <row CategoryID= Nanme=Condiments/>
  
  <row CategoryID= Nanme=Beverages/>
  
  連接查詢
  
  查詢語句
  
  SELECT CategoriesCategoryID
  
  CategoriesCategoryName
  
  ProductID
  
  ProductName
  
  FROM Categories
  
  JOIN Products ON CategoriesCategoryID = ProductsCategoryID and ProductID <
  
  WHERE CategoriesCategoryID <=  FOR XML RAW
  
  返回結果
  
  <row CategoryID= CategoryName=Beverages ProductID= ProductName=Chai/>
  
  <row CategoryID= CategoryName=Beverages ProductID= ProductName=Chang/>
  
  <row CategoryID= CategoryName=Condiments ProductID= ProductName=Aniseed Syrup/>

From:http://tw.wingwit.com/Article/program/SQLServer/201311/22215.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.