從SQL Server 2000開始,微軟開始支持XML類型的數據。在SQL Server2005中,微軟延續了這一特性,並加強了對XML 數據列、XML變量以及XML索引的支持。
在數據庫中存儲XML數據是一個很出色的特征。對於大部分的數據處理需求來講,將XML數據格式化為其它關聯數據是十分重要。這也是引入OPENXML函數的原因。OPENXML是一個SQL Server提供的函數,它的作用是接收XML數據,提供內存中 XML數據的行集視圖。
一個OPENXML函數用例
在下面的例子中,我們將演示如何使用OPENXML函數。假定我們現在正在從事一個網上購物系統開發。在這個場景中,顧客選擇登錄網站方式購買多種產品。因為根據公司的商業模式,通過網站購物能夠節省成本。我們假定大部分的顧客都購買了七件或者更多的商品。我們的目標是當客戶頻繁的訪問網站的時候,要盡量減少數據庫的調用。我們的想法是將網頁上提交的采購需求存儲為XML文檔,並且將其中的XML數據以字符串的形式傳送給數據庫底層的程序處理。這樣,我們就可以在一次數據庫調用中將XML數據中的訂單信息插入數據庫中。
我們該如何解決上面的問題呢?首先我們看看將要編輯的網頁數據。一個簡單的XML文檔含有來自網站的很多核心信息,包括:產品名稱、價格、日期以及顧客資料。列表A包含了一個簡單的XML數據流。
<ShoppingCart>
<Purchase ProductID="7" Price="10.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="99" Price="25.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="32" Price="12.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="11" Price="90.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="7" Price="50.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="8" Price="67.35" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="45" Price="29.99" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
<Purchase ProductID="54" Price="49.49" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
</ShoppingCart>
列表A