首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2008 XML 新功能導論:從 FOR XML 到原生 XML 型別的演進

     編輯:關於SqlServer

XML 功能演進脈絡

Microsoft SQL Server 的 XML 支援經歷三個關鍵里程碑:

  1. SQL Server 2000:引入 FOR XML(查詢結果輸出 XML)與 OPENXML(XML 解析為資料列集),以關鍵字擴展 T-SQL。
  2. SQL Server 2005:推出原生 xml 資料型別,支援 XSD 驗證、XQuery 操作、XML 索引,XML 成為一等公民。
  3. SQL Server 2008:在 2005 基礎上強化 Schema 驗證、擴充 XQuery 支援、增強 XML DML 插入能力,解決企業級 XML 儲存與操作痛點。

SQL Server 2000 回顧

FOR XML AUTO

SELECT ProductID, ProductName
FROM Products
FOR XML AUTO;

輸出屬性中心式 XML 片段:

<Product ProductID="1" ProductName="Widget"/>
<Product ProductID="2" ProductName="Sprocket"/>

OPENXML 解析 XML 為資料列集

DECLARE @doc NVARCHAR(1000) = 
  '<Order OrderID="1011">
     <Item ProductID="1" Quantity="2"/>
     <Item ProductID="2" Quantity="1"/>
   </Order>';

DECLARE @XMLDoc INT;
EXEC sp_xml_preparedocument @XMLDoc OUTPUT, @doc;

SELECT *
FROM OPENXML(@XMLDoc, 'Order/Item', 1)
WITH (OrderID INT '../@OrderID', ProductID INT, Quantity INT);

EXEC sp_xml_removedocument @XMLDoc;

需手動管理 DOM 文件控制代碼(sp_xml_preparedocument/removedocument),記憶體壓力大。

SQL Server 2005 關鍵突破

原生 xml 型別與 Schema 集合

CREATE XML SCHEMA COLLECTION ProductSchema AS
N'

  
';

CREATE TABLE SalesOrders(
    OrderID INT PRIMARY KEY,
    OrderDate DATETIME,
    CustomerID INT,
    OrderNotes XML(ProductSchema)  -- 類型化 XML 欄位
);
  • 非類型化 XML:僅保證 Well-formed。
  • 類型化 XML:綁定 Schema 集合,INSERT/UPDATE 時自動驗證結構與資料型別。

FOR XML PATH 模式:靈活構建階層結構

SELECT ProductID AS '@ProductID',
       ProductName AS 'ProductName'
FROM Products
FOR XML PATH('Product'), ROOT('Products');

輸出元素中心式 XML,支援屬性(@)、巢狀結構、根元素自訂。

為何升級至 2008?

2008 版針對企業級場景的三大增強:

  • Lax 驗證模式:允許「有 Schema 才驗證、無 Schema 就略過」的彈性通配符處理。
  • 完整 dateTime/date/time 時區保留:不再強制轉 UTC,保留原始時區資訊。
  • Union / List 型別支援完善:符合 XSD 規格的簡單型別限制。

下篇將深入解析這三大增強的實作細節與範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved