程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 查詢開放內容

查詢開放內容

編輯:關於SqlServer

開放內容是 XML 文檔中一組不會在文檔架構中專門進行定義的元素和屬性。簡單地說,您可以將開放內容視為 XML 文檔中您的程序不會專門去訪問的的元素和屬性。在四月份的專欄文章(“‘Open’ XML Content”,InstantDoc ID 37840)中,我解釋了如何通過使用 OpenXML、XML Bulk Load 和 updategram 在 SQL Server 2000 中存儲開放內容,使支持 XML 的應用程序實現可擴展性。該方案要求您在 SQL Server 數據庫中存儲一個 XML 格式的價格表,其中包括開放內容。在本文中,我們將繼續討論該方案,了解如何從 SQL Server 數據庫提取開放內容,通過將該開放內容與您的客戶下達定單的每個行項目包括在一起,將它發送給履行定單的提供商。如果您沒有上個月的示例數據庫,可以在 http://www.sqlmag.com 輸入 InstantDoc ID 37840,下載代碼來創建此數據庫。

您可以選擇幾種不同的方法從數據庫提取開放內容。使用一種簡單的方法,您就可以通過普通的 SQL 查詢檢索數據(與返回 XML 的 SQL 查詢正好相反),然後通過使用所選的編程 API 將結果處理為 XML(如圖 1 所示)。您也可以使用直接返回 XML 的查詢,在這種情況下,有兩個選擇。一個選擇是,您可以使用 FOR XML EXPLICIT 來編寫在查詢中包括開放內容並返回 XML 的 SQL 查詢。另一個選擇是,您可以使用在虛擬 XML 文檔中包括開放內容的 XML 視圖,通過使用 XML 路徑語言 (XPath) 可以查詢虛擬 XML 文檔。在這兩個選擇方案中,SQL Server 會將數據庫中存儲的開放內容與您在查詢的其他部分指定的 XML 結果進行合並。選擇的方法取決於您的編程環境。您可以用許多方式實現這一簡單的方法 - 從簡單文本操作到通過使用對象模型來處理 XML。另外兩種方法使用 SQL Server 的 XML 支持,下面我們來更詳細地了解上述方法。

FOR XML EXPLICIT 查詢

利用 FOR XML 子句,您可以直接從 SQL Server 2000 獲得 XML 結果。FOR XML 支持三種操作模式:Raw、Auto 和 Explicit。每個選項都會改變您的查詢返回的 XML 的格式。Explicit 模式是唯一支持開放內容的模式。Explicit 模式使您可以完全控制 XML 查詢結果的形狀(有時也稱為 XML 語法或架構)。使用 Explicit 模式查詢,您可以指定 XML 文檔的層次結構以及文檔內的元素和屬性的名稱。

您可以通過在 SQL 查詢中指定特殊結構化列別名來指定這些名稱。結構化列的別名包含四個邏輯字段,每個字段之間用感歎號分隔。第一個字段指定父元素的名稱,第二個字段指定元素在得到的 XML 文檔中的嵌套方式,第三個字段(如果不是空的)指定包含列數據的元素或屬性的名稱。第四個字段指定格式設置指令。格式設置指令會使得列數據以一種特殊的方式進行格式設置。例如,cdata 指令包括 CDATA 節內的列數據。(CDATA 節是一種避免在列數據中用 代替字符的特殊方式。有關詳細信息,請參閱 XML 語言規范,網址是 http://www.w3.org/TR/REC-XML#sec-cdata-sect。)另一個格式設置指令 XMLtext 指定列的內容應該與查詢返回的 XML 結果合並。下面我們將討論 XMLtext 指令如何工作的示例。

在該示例的情況中,一旦您批准處理客戶的定單,則需要將定單發送給履行定單的提供商,然後,提供商將貨物發運給您的客戶。在實際應用中,定單會包含許多要在您和履行定單提供商之間進行交換的數據。為簡單起見,我們只討論您如何在定單中包括行項目的開放內容。當您處理來自供應商的價格表時,您會存儲各個產品的開放內容。現在,您需要將開放內容與發送給履行定單的提供商的定單包括在一起。

為簡單起見,我不提供將示例 Orders 表與 Products 表聯接起來的代碼;這是一個簡單的關系查詢。我們將重點放在如何從 Products 表提取行項目上。清單 1 說明了提取 ProductID 為 22 的產品的 FOR XML EXPLICIT 查詢的使用。注意,SELECT 清單中的最後一列使用指定 XMLtext 指令的列別名。此列檢索開放內容。現在,我們來看看圖 1 的 Overflow 列中的值。Product 元素包括重量屬性和 QuantityPerUnit 子元素。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved