Microsoft 在Microsoft SQL Server 2000中推出了與XML相關的功能以及Transact-SQL 關鍵字FOR XML和OPENXML ,這使得開發人員可以編寫Transact-SQL代碼來獲取XML流形式的查詢結果,并將一個XML文檔分割成一個rowset。SQL Server 2005顯著的擴展了這些XML功能,推出了一個支持XSD schema驗證、基于XQuery的操作和XML索引的本地的xml 數據類型。SQL Server 2008建立在之前版本的XML功能基礎之上,做了改進來迎接客戶在存儲和操縱數據庫中的XML數據時所面臨的挑戰。
2 SQL Server XML 功能的發展歷程
SQL Server的XML功能隨著從SQL Server2000版本以來的每一個版本而不斷發展。在我們檢查SQL Server 2008中的改進之前,通過之前的版本來總結XML功能的發展歷程可能會比較有用。
2.1 SQL Server 2000中的XML功能
在SQL Server 2000中,Microsoft 推出了Transact-SQL 關鍵字FOR XML和OPENXML。FOR XML 是對SELECT語句的擴展,它返回如下面的示例所示的XML流式的查詢結果。
| SELECT ProductID, ProductName FROM Products Product FOR XML AUTO |
這個查詢返回一個如下面示例所示的XML片斷:
| <Product ProductID="1" ProductName="Widget"/> <Product ProductID="2" ProductName="Sprocket"/> |
OPENXML 功能執行與FOR XML 條件子句相反的功能,它創建一個XML文檔的rowset ,如下面的示例所示:
| DECLARE @doc nvarchar(1000) SET @doc = '<Order OrderID = "1011"> <Item ProductID="1" Quantity="2"/> <Item ProductID="2" Quantity="1"/> </Order>' DECLARE @xmlDoc integer EXEC sp_xml_preparedocument @xmlDoc OUTPUT, @doc SELECT * FROM OPENXML (@xmlDoc, 'Order/Item', 1) WITH (OrderID integer '../@OrderID', ProductID integer, Quantity integer) EXEC sp_xml_removedocument @xmlDoc |
注意用sp_xml_preparedocument和sp_xml_removedocument 存儲過程來創建XML文檔的節點樹的一個內存展示的用法。這個Transact-SQL 代碼返回下面的rowset。
|
OrderID |
ProductID |
Quantity |
|
1011 |
1 |
2 |
|
1011 |
2 |
1 |


