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

SQL Server 與 XML 深度整合:FOR XML 子句完整指南與實戰範例

     編輯:關於SqlServer

為什麼在資料庫層產生 XML?

將關聯資料直接轉換為 XML,避免中介層逐筆組裝,降低網路傳輸量與應用程式複雜度。SQL Server 透過 `FOR XML` 子句原生支援三種輸出模式。

三大模式語法與輸出比較

SELECT ... FROM ...
FOR XML
    RAW | AUTO | EXPLICIT
    [, XMLDATA]
    [, ELEMENTS]
    [, BINARY BASE64]

1. RAW 模式 — 扁平化列屬性

每筆記錄產生一個 `` 元素,欄位對應屬性。適合簡單匯出、非階層資料。

SELECT TOP 3 OrderID, OrderDate, ProductID
FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID
ORDER BY OrderID
FOR XML RAW
輸出: ```xml ```

2. AUTO 模式 — 依 JOIN 關係自動產生巢狀結構

資料表名稱成為元素名稱,關聯表形成父子階層。最常用於主從結構(訂單-明細)。

SELECT TOP 3 OrderID, OrderDate, ProductID
FROM Orders o JOIN [Order Details] od ON o.OrderID = od.OrderID
ORDER BY OrderID
FOR XML AUTO
輸出: ```xml ``` 注意:空格等特殊字元在元素名稱中會編碼為 `_x0020_`。

3. EXPLICIT 模式 — 完全控制 XML 結構(進階)

需在 SELECT 清單中以 `Tag`、`Parent`、欄位別名(`ElementName!Tag!AttributeName!Directive`)定義結構。彈性最大但撰寫複雜,適合特殊格式需求(如特定 Schema 遵從)。

常用選項

選項效果
XMLDATA結果前附加 XDR Schema 定義(已淘汰,建議改用 XSD)
ELEMENTS強制欄位輸出為子元素而非屬性(`10248`)
BINARY BASE64二進位資料以 Base64 編碼輸出(預設若含二進位欄位會報錯)

限制與注意事項

  • 不可搭配 `COMPUTE BY`、檢視表定義(`CREATE VIEW`)使用。
  • `FOR XML AUTO` 需有 `FOR XML` 權限(預設 public 擁有)。
  • 大量資料輸出時考慮效能,必要時分頁或使用伺服器端游標。

延伸:OPENXML 與 XML 大量載入

反向操作:`OPENXML` 將 XML 文件解析為資料列集供 `INSERT/UPDATE`;`XML Bulk Load` (COM 物件) 提供高效能大量匯入。配合 `xml` 資料類型(SQL 2005+),構建完整的關聯-XML 雙向整合能力。

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