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

深入探討SQL Server 2000對XML的支持

2013-11-15 14:39:34  來源: SQL Server 

  我們可以很簡單的使用ADO訪問數據庫中的數據但是如果我們想把從數據庫中檢索得到的數據以XML的格式顯示出來的話就要費點神了當然我們可以去找一些現成的應用程序或者是把現有的存儲過程修改一下來完成這個想法
  
    雖說ADO宣稱支持XML但是它仍需要一個額外的層來處理把數據轉化成XML的過程幸好有了SQL Server 它宣稱可以直接從數據庫中取出數據而不通過ADO直接把數據以XML方式顯示出來這個功能極大的提高了構造分布式數據集中的應用程序的性能因為這個特性消除了不必要的代碼層
  
    讓我們看一看為了支持XMLSQL Server 添加了什麼新的特性
  
    能夠使用 HTTP 訪問 SQL Server
  
    支持 XDR(XML數據簡化)架構並且能夠指定對這些架構的 XPath 查詢
  
    能夠檢索並寫入 XML 數據
  
      使用 SELECT 語句和 FOR XML 子句檢索 XML 數據
  
      使用 OPENXML 行集提供程序寫入 XML 數據
  
      使用 XPath 查詢語言檢索 XML 數據
  
    增強了 Microsoft SQL Server OLE DB 提供程序 (SQLOLEDB)使得可以將 XML 文檔設置為命令文本並以流的形式返回結果集
  
    可見我們可以使用好幾種方法使用SQL Server 來訪問XML格式的數據第一種在 URL 中執行的查詢可以直接訪問 SQL Server 生成XML文檔(也可以調用存儲在Web服務器上的XML模版生成XML數據文件)第二種可以使用SELECT命令和FOR XML關鍵字通過調用一個存儲過程或是通過使用XPath查詢來取得XML數據SQL Server 完全支持 XDR(XML數據簡化)架構具有映射XML元素和屬性到表和字段中的功能下面我就探討一下SQL Server 對XML的支持特性
  
    一配置SQL Server 的IIS虛擬目錄
  
    在本文的開始我想先談一談如何配置SQL Server 的IIS虛擬目錄SQL Server 允許為IIS創建一個虛擬目錄用來直接訪問一個SQL數據庫中的數據一旦在一台配置了IIS的計算機上安裝了SQL Server 就可以運行SQL Server 的 IIS 虛擬目錄管理實用工具來配置SQL Server 的IIS虛擬目錄
  
    好讓我們開始配置過程吧!
  
    在SQL Server 工具程序組中單擊在 IIS 中配置 SQL XML 支持這時就會出現一個與IIS管理器相似的界面展開服務器選取默認的 Web 站點點右鍵在彈出的菜單中選取新建選項然後單擊虛擬目錄命令新虛擬目錄的屬性頁將顯示在屏幕上新的虛擬目錄屬性對話框的常規選項卡上輸入虛擬目錄的名稱在本例中請輸入Northwind和物理目錄路徑(例如 C:\Inetpub\Wwwroot\Northwind假設在 C:\Inetpub\Wwwroot 目錄中已創建了 Northwind子目錄)當然我們也可以使用浏覽按鈕選擇目錄安全性選項卡上填入有效的 SQL Server 登錄信息在進入下一個選項卡時它將要求你確認剛才輸入的密碼數據源選項卡上SQL Server框中輸入服務器的名稱數據庫框中輸入 Northwind 作為默認數據庫的名稱設置選項卡上你可以選擇允許 URL 查詢允許模板查詢允許 XPath允許 POST選項
  
    在構建一個應用程序時你不但要考慮到能夠訪問到SQL Server數據庫要有足夠的安全級別以保證你的數據的安全性虛擬名稱選項卡上你可以更具自己的需要選擇新建模板類型(template)架構類型(schema)和模板和架構類型(dbonject)並創建它們的路徑我們這樣就創建了虛擬目錄 Northwind默認情況下使用該虛擬目錄對 Northwind 數據庫執行指定的查詢你一定迫不及待的吸納高看看執行SQL的結果是什麼樣的了吧?好讓我們在浏覽器中輸//localhost/northwind?sql=SELECT * FROM CUSTOMERS FOR XML AUTO&root=root試驗一下吧!
  
    我們還可以編程來實現配置SQL Server 的IIS虛擬目錄請見下面的代碼
  
    Set ObjXML = CreateObject(SQLVDirSQLVDirControl)
  
    ObjXMLConnect Connect to the local computer and Web site
  
    Set ObjVDirs = ObjXMLSQLVDirs
  
    Set ObjVDir = ObjVDirsAddVirtualDirectory(Northwind)
  
    ObjVDirPhysicalPath = C:\Inetpub\wwwroot\northwind
  
    ObjVDirUserName = wayne SQL Server login
  
    ObjVDirPassword = SQL Server Password
  
    ObjVDirDatabaseName = Northwind
  
    objVDirAllowFlags =
  
    Set objVNames = objVDirVirtualNames
  
    objVNamesAddVirtualName dbobject
  
    objVNamesAddVirtualName schema C:\Inetpub\wwwroot\northwind\schema
  
    objVNamesAddVirtualName template C:\Inetpub\wwwroot\northwind\template
  
    objXMLDisconnect
  
    msgbox Done
  
  
  
  二使用 HTTP 執行 SQL 語句
  
    使用我們剛才創建的虛擬目錄我們就可以通過把SQL查詢語句寫入URL的方式執行查詢打開浏覽器在地址欄中寫入以下//localhost/northwind?sql=SELECT+ *+FROM+Customers+WHERE+CustomerID=ANTON +FOR+XML+AUTO&root=root如果你使用的虛擬目錄別名不是Northwind或者你使用一個遠程服務器只需要把相應的值改掉就可以了
  
    浏覽器中會出現
  
  <?xml version= encoding=utf ?>
  <root>
  <Customers CustomerID=ANTON CompanyName=Antonio Moreno Taquería ContactName=Antonio Moreno ContactTitle=Owner Address=Mataderos City=México DF PostalCode= Country=Mexico Phone=() />
  </root>
  
  
    讓我們來分析一下這個URL//localhost/northwind後面跟了一個SQL查詢語句用來執行查詢數據庫Northwind的任務在本例中我們使用的查詢語句是SELECT+*+FROM+Customers+WHERE+CustomerID=ANTON請注意這條語句已經被URL編碼過了其中的空格都被替換成加號+這樣它才能被浏覽器正確的傳送到數據庫中去關於URL編碼格式請您參閱相關文檔
  
    在查詢語句之後有添加了兩個新的關鍵字FOR XML和AUTOFOR XML關鍵字可以對現有的關系數據庫執行 SQL 查詢以返回 XML 文檔形式AUTO模式則將查詢結果作為嵌套 XML 元素返回在 FROM 子句內每個在 SELECT 子句中至少有一列被列出的表都表示為一個 XML 元素SELECT 子句中列出的列映射到適當的元素特性當指定了 ELEMENTS 選項後表列映射到子元素而非特性默認情況下AUTO 模式將表列映射到 XML 特性
  
    在FOR XML AUTO後還需要添加一個參數root其參數值作為返回的XML文件的root元素名比如說你可以把上面我給出的例子中的root的參數值設為Northwind你會發現返回的XML文件中除了root元素名變為Northwind了以外其它都沒有變化
  
    上面我們說的是直接使用HTTP中執行簡單的查詢除此之外你還可以執行更加復雜的查詢比如說連接不同的表進行查詢請看下面的例子在下例中SELECT 語句連接了 Northwind 數據庫的中的 Customers 和 Orders 表並返回信息
  
 //localhost/northwind?sql=SELECT
  CustomerCustomerID%cCustomerContact
  Name%c%bOrder%dOrderID+FROM+Customers+
  Customer+INNER+JOIN+Orders+%bOrder%
  d+ON+CustomerCustomerID%d%bOrder%
  dCustomerID+FOR+XML+AUTO&root=Northwind
  
  
  因為返回的XML文件太長我就不把它列出來了
  
    如果你不想在Customers表和Orders表中出現嵌套的話SQL Server 還提供另一個關鍵字用來替代AUTO這個關鍵字就是RAWRAW 模式將查詢結果集中的每一行轉換為帶有類屬標識符 row 的 XML 元素為了讓您能夠深入了解RAW我再給出一個例子使用 RAW 模式檢索客戶和訂單信息
  
    下面的查詢返回客戶和訂單信息在 FOR XML 子句中指定 RAW 模式
  
  
  SELECT CustomersCustomerID OrdersOrderID OrdersOrderDate
  FROM Customers Orders
  WHERE CustomersCustomerID = OrdersCustomerID
  ORDER BY CustomersCustomerID
  FOR XML RAW
  
  
    下面是部分結果
  
  <row CustomerID=ALFKI OrderID= OrderDate=T::/>
  
  <row CustomerID=ANATR OrderID= OrderDate=T::/>
  
  <row CustomerID=ANATR OrderID= OrderDate=T::/>
  
  <row CustomerID=AROUT OrderID= OrderDate=T::/>
  
  
    可以使用外部聯接指定上面的查詢在結果集中返回所有客戶無論這些客戶是否有訂單
  
  
     SELECT CCustomerID OOrderID OOrderDate
       FROM Customers C LEFT OUTER JOIN Orders O
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22135.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.