程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> MS SQL基礎教程:XML文檔與數據庫表

MS SQL基礎教程:XML文檔與數據庫表

編輯:關於SqlServer

包括SQL Server 7.0 在內的SQL Server 系列版本並不提供XML。 支持開發人員以前不得不使用一個XML 分析器,如微軟的XML 分析器(MSXML),而且它們必須編寫自己的代碼來處理細節:把不同的元素從XML 文檔中提取出來並按需要把它們放進關系表的不同部分,然後訪問關系表;或者編寫代碼將數據從數據庫表中提取出來,再以正確的格式放回到XML 文檔中。當我們在享受XML 所帶來的好處時,我們常會發現自己在開發Web 應用程序時不得不應付這樣的工作,而且在開發不同的Web 應用程序時仍然不得不重新編寫代碼。由此可見,開發人員真正需要的是一種在數據庫中處理XML 的一般方法而這正是使用SQL Server 2000 時所能作到的,即在關系式數據表中存儲XML 文檔,從關系式數據中產生XML 文檔。

20.3.1 從關系式數據中產生XML 文檔

在SQL Server 2000 中通過使用SELECT 語句可以把查詢結果存儲為XML 文檔而不是通常意義上的結果集,這樣通過比原來少得多的編碼就可以使Web 應用或其它應用直接使用XML 文檔,從而方便企業與供應商之間的業務交流。

將關系數據庫的查詢結果顯示成XML 文檔是通過FOR XML 語句來完成的。在使用FOR XML 語句的同時可以指定XML 的MODE (RAW、 AUTO、 EXPLICIT)以及XMLDATA 的模式(Schema)。 FOR XML 語句的語法規則為:

FOR XML mode [, XMLDATA] [, ELEMENTS][, BINARY BASE64]

各參數的含義說明如下: mode

表示返回結果集的XML mode, 共有三種取值,即RAW、 AUTO、 EXPLICIT。 XMLDATA

表示將返回XMLDATA 模式。 ELEMENTS

使用該選項時,表示將相應的關系表列作為XML 文檔的子元素;否則其將與 XML 屬性相匹配。僅當選用AUTO 時才可以使用該選項。 BINARY BASE64

表示由查詢返回的二進制數據以64 位編碼的形式顯示。 1 RAW 模式

使用RAW 模式時查詢結果集中的每一行都作為XML 文檔的一個元素,非空列將作為相應的XML 文檔元素的屬性,其屬性名與列名保持一致。

2 AUTO 模式

使用AUTO 模式時查詢結果集作為嵌套XML 元素。FROM 從句中的每一個表名作為XML 元素,在SELECT 語句中的各列作為XML 文檔元素的屬性。如果使用ELEMENTS 選項,則SELECT 語句中的各列作為XML 文檔元素的子元素。

3 EXPLICIT 模式

在使用EXPLICIT 模式時,查詢復寫器控制由查詢返回的結果集所形成的XML 文檔的格式,元素的嵌套層次。以及屬性同時必須保證XML 文檔是良構(wellformed)的,並且具有有效的XML-DATA 模式。

20.3.2 在關系數據庫表中存儲XML 文檔

在實施B2C (商業到客戶)電子商務模式的企業中,客戶經常直接在Web 頁面訂購產品支付現金,這些數據一般並不直接存入數據庫中而是基於安全性以及在統一標准下數據轉換具有高效性的考慮而將其存儲在XML 文檔中,然後再存入數據庫中。這就需要從XML 文檔中提取數據信息並將其存入關系數據庫中。在SQL Server 2000 中OPENXML 語句提供了在關系數據庫表中存儲XML 文檔的功能。

OPENXML 是一個行集提供者,與表和視圖極為相似。通過OPENXML 提取XML 文檔數據與讀取關系型行結果集數據一樣簡單、高效。在使用OPENXML 前必須首先調用sp_xml_preparedocument 系統過程,其主要作用是解析XML 文檔,並返回該文檔的文件指針。然後該文件指針傳給OPENXML, 其根據傳來的參數將XML 文檔轉換成行結果集。最後通過調用sp_xml_removedocument 系統過程來釋放由 XML 文檔所占用的內存空間。其具體執行過程請參看圖20-2。

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