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

SQL Server 2000 XML 支援深度解析:從 HTTP 存取到 FOR XML 與 OPENXML

     編輯:關於SqlServer

SQL Server 2000 的 XML 原生支援優勢

ADO 2.5 雖宣稱支援 XML,但仍需額外轉換層。SQL Server 2000 可直接從資料庫輸出 XML,省去中介層,大幅提升分散式、資料集中式應用效能。

四大核心 XML 功能

  1. HTTP 直接存取: 透過 URL 查詢資料庫並取得 XML 文件
  2. XDR 結構描述與 XPath 查詢: 支援 XML-Data Reduced 結構描述,可對應資料表/欄位
  3. XML 資料檢索與寫入:
    • SELECT ... FOR XML 子句產生 XML
    • OPENXML 資料列集提供者寫入 XML
    • XPath 查詢語言檢索 XML
  4. 增強 OLE DB 提供者 (SQLOLEDB): 命令文本可為 XML 文件,結果集以串流形式回傳

實作入門:配置 IIS 虛擬目錄啟用 HTTP 存取

圖形介面配置步驟

  1. 「開始」→「程式集」→「SQL Server 工具」→在 IIS 中配置 SQL XML 支援
  2. 展開伺服器 → 右鍵「預設網站」→「新增」→「虛擬目錄」
  3. 一般頁籤:虛擬目錄名稱(如 Northwind)、實體路徑(如 C:\Inetpub\Wwwroot\Northwind)
  4. 安全性頁籤:輸入有效 SQL Server 登入資訊
  5. 資料來源頁籤:SQL Server 名稱、預設資料庫(Northwind)
  6. 設定頁籤:勾選「允許 URL 查詢」、「允許範本查詢」、「允許 XPath」、「允許 POST」
  7. 虛擬名稱頁籤:新增範本、結構描述、dbobject 類型與路徑

驗證測試

瀏覽器輸入:

https://localhost/northwind?sql=SELECT * FROM Customers FOR XML AUTO&root=root

即可看到 XML 格式的客戶資料。

程式化配置虛擬目錄(SQL-DMO)

Dim objXML
Set objXML = CreateObject("SQLXML.SqlXmlConfig")
' ... 後續配置程式碼

FOR XML 模式詳細比較

模式特性適用場景
RAW每列產生一個 <row> 元素,欄位為屬性簡單平面資料,效能最佳
AUTO依 JOIN 關係產生巢狀結構,表名為元素名主從關係資料,無需複雜控制
EXPLICIT完全控制 XML 結構,需撰寫複雜的 SELECT 配合 TAG/PARENT高度客製化 XML 格式需求

範例:FOR XML AUTO

SELECT C.CustomerID, C.CompanyName, O.OrderID, O.OrderDate
FROM Customers C
LEFT JOIN Orders O ON C.CustomerID = O.CustomerID
FOR XML AUTO, ROOT('Customers')

OPENXML 寫入 XML 資料流程

  1. sp_xml_preparedocument:將 XML 文字解析為記憶體 DOM 樹,取得文件控制代碼
  2. OPENXML(@handle, xpath, flags):以資料列集形式公開 XML 節點
  3. WITH 子句定義欄位對應(欄位名、型別、XPath)
  4. 標準 INSERT/UPDATE/DELETE 操作資料列集
  5. sp_xml_removedocument:釋放記憶體(必須執行,否則洩漏)

最佳實踐建議

  • 生產環境避免直接 URL 查詢(安全性風險),改用範本查詢(.xml 檔案預存 SQL/XPath)
  • 大量資料輸出時使用 FOR XML RAW 搭配應用程式端組裝,效能優於 AUTO/EXPLICIT
  • 啟用 SET NOCOUNT ON 減少網路封包
  • 定期監控 sp_xml_preparedocument 記憶體使用,防止 OOM

SQL Server 2000 的 XML 功能雖非最新標準(後續版本支援 XSD、XML 資料型別、XQuery),但在當時為資料庫原生 XML 處理奠定重要基礎。

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