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

讓 SQL Server 資料原生支援 XML:HTTP 端點、FOR XML、OPENXML、模板查詢與 XSD 對應

     編輯:關於SqlServer

為何選擇 SQL Server 原生 XML?

  • 零中介層轉換:資料庫直接產出/消費 XML,免去應用層序列化/反序列化開銷與錯誤。
  • 彈性介面:同一資料集可服務瀏覽器 (XSLT→HTML)、行動 App (JSON/XML)、合作夥伴 B2B (標準 Schema)、報表引擎。
  • 標準化技術棧:W3C XPath/XQuery/XSLT/XML Schema,工具鏈成熟、人才易找。

SQL Server 2000 五大原生 XML 功能

1. HTTP 端點 (SQL ISAPI / sqlisapi.dll)

在 IIS 建立虛擬目錄,對應單一資料庫,提供 URL 介面:

  • 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。
  • XPath 查詢:針對 XSD 對應結構描述 (虛擬 XML 視圖) 執行 XPath,自動轉譯為 SQL。
**安全性**:停用 URL 查詢、啟用 Windows 整合驗證+SSL、最小權限資料庫使用者、參數化模板、防火牆限制 IP。

2. FOR XML 子句:關聯 → XML

模式特性適用場景
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');

3. OPENXML:XML → 關聯 (大量載入/剖析)


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;
  • 記憶體模型**:DOM 樹駐留記憶體,**大型 XML 嚴禁** (改用 XML Bulk Load 或 SQL 2005+ XML 型別 .nodes() 流式剖析)。
  • 邊緣案例**:命名空間處理需 WITH (..., NAMESPACES ...) 或 XPath 前綴宣告。

4. 模板查詢:參數化、重用、安全




  
    
    
  
  
    SELECT OrderID, CustomerID, OrderDate, TotalAmount
    FROM Orders
    WHERE OrderDate BETWEEN @StartDate AND @EndDate
    FOR XML AUTO, ELEMENTS, ROOT('Orders')
  
    

5. XSD 對應結構描述 (Mapping Schema) + XML 視圖

定義 XML 與資料表/欄位對應,支援 sql:relation, sql:field, sql:key-fields, sql:relationship, sql:overflow-field (開放內容)。註冊後可用 XPath 查詢虛擬 XML 視圖,自動合併開放內容。

進階:XML Bulk Load (高效能大量載入)


-- 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"
  • 流式剖析、最小記錄 (簡單復原模式)、平行執行、支援身分值/預設值/計算欄位。
  • 需 XSD 含 sql:relation, sql:field, sql:key-fields 等對應註解。

現代化遷移路徑 (SQL Server 2005+)

舊功能現代替代優勢
HTTP 端點 (ISAPI)原生 HTTP 端點 (CREATE ENDPOINT) / WCF / ASP.NET Web API / OData免 IIS、Managed 代碼、標準化、安全性強
FOR XML AUTO/EXPLICITFOR XML PATH / JSON (FOR JSON PATH)語法簡潔、支援巢狀、JSON 原生
OPENXMLXML 型別 + .nodes()/.value()/.query() (XQuery)流式、索引支援 (XML 索引)、型別安全
模板查詢 / XSD 視圖預存程序 + FOR XML/JSON / GraphQL / OData版控、測試、效能、安全性更易控制
XML Bulk LoadINSERT ... 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 雙格式互轉,是資料庫工程師跨時代的核心競爭力。

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