在 IIS 建立虛擬目錄,對應單一資料庫,提供 URL 介面:
https://srv/VDir?sql=SELECT+*+FROM+Table+FOR+XML+AUTO&root=Root (僅測試/原型,生產禁用)。.xml 檔含參數化 SQL/XPath、XSLT 參考,儲存於 template 子資料夾,呼叫 https://srv/VDir/template/GetData.xml?Param=Value。**安全性**:停用 URL 查詢、啟用 Windows 整合驗證+SSL、最小權限資料庫使用者、參數化模板、防火牆限制 IP。
| 模式 | 特性 | 適用場景 |
|---|---|---|
RAW | 每列一個 <row> 元素,屬性為欄位,可指定 ELEMENTS 產生子元素 | 簡單扁平化、程式化處理 |
AUTO | 依 JOIN 順序自動巢狀,表名為元素名,關聯推導階層 | 快速產生階層、無需手工控制 |
EXPLICIT | 完全控制輸出形狀,需手工構建 Tag/Parent/欄位別名,支援 XMLTEXT 合併開放內容 | 複雜非標準結構、開放內容合併 |
PATH (SQL 2005+) | 路徑式語法 (Column/@Attr, Column/Element, Column//Nested),簡潔強大,取代 EXPLICIT 多數用途 | 現代標準、強烈推薦 |
-- 範例:AUTO + ELEMENTS + 根元素
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE Country = 'Germany'
FOR XML AUTO, ELEMENTS, ROOT('Customers');
DECLARE @DocHandle int, @Xml nvarchar(max) = N' ';
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @Xml;
SELECT *
FROM OPENXML(@DocHandle, '/Orders/Order/Item', 2) -- 2 = 元素中心
WITH (OrderID int '../@ID', ProductID int '@ProductID', Qty int '@Qty');
EXEC sp_xml_removedocument @DocHandle;
XML 型別 .nodes() 流式剖析)。WITH (..., NAMESPACES ...) 或 XPath 前綴宣告。
SELECT OrderID, CustomerID, OrderDate, TotalAmount
FROM Orders
WHERE OrderDate BETWEEN @StartDate AND @EndDate
FOR XML AUTO, ELEMENTS, ROOT('Orders')
定義 XML 與資料表/欄位對應,支援 sql:relation, sql:field, sql:key-fields, sql:relationship, sql:overflow-field (開放內容)。註冊後可用 XPath 查詢虛擬 XML 視圖,自動合併開放內容。
-- VBScript / COM 介面
Set bl = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad.4.0")
bl.ConnectionString = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=Db;Integrated Security=SSPI"
bl.ErrorLogFile = "C:\Logs\XmlBulkLoad.err"
bl.Execute "C:\Schemas\Orders.xsd", "C:\Data\Orders.xml"
sql:relation, sql:field, sql:key-fields 等對應註解。| 舊功能 | 現代替代 | 優勢 |
|---|---|---|
| HTTP 端點 (ISAPI) | 原生 HTTP 端點 (CREATE ENDPOINT) / WCF / ASP.NET Web API / OData | 免 IIS、Managed 代碼、標準化、安全性強 |
| FOR XML AUTO/EXPLICIT | FOR XML PATH / JSON (FOR JSON PATH) | 語法簡潔、支援巢狀、JSON 原生 |
| OPENXML | XML 型別 + .nodes()/.value()/.query() (XQuery) | 流式、索引支援 (XML 索引)、型別安全 |
| 模板查詢 / XSD 視圖 | 預存程序 + FOR XML/JSON / GraphQL / OData | 版控、測試、效能、安全性更易控制 |
| XML Bulk Load | INSERT ... SELECT FROM OPENROWSET(BULK ...) / SSIS / PolyBase | 整合 ETL 流程、監控、錯誤處理 |
SQL Server 原生 XML 功能在 2000 年代解決了「資料庫與 Web 交換格式不匹配」的核心痛點。今日雖以 JSON/REST/GraphQL 為主流,但 **XML 仍在 B2B 電子發票、政府標準交換、醫療 HL7/FHIR、金融 ISO 20022** 等領域佔主導。掌握 FOR XML PATH、XML 型別 XQuery、OPENJSON 雙格式互轉,是資料庫工程師跨時代的核心競爭力。