將關聯資料直接轉換為 XML,避免中介層逐筆組裝,降低網路傳輸量與應用程式複雜度。SQL Server 透過 `FOR XML` 子句原生支援三種輸出模式。
SELECT ... FROM ...
FOR XML
RAW | AUTO | EXPLICIT
[, XMLDATA]
[, ELEMENTS]
[, BINARY BASE64]
每筆記錄產生一個 `
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
資料表名稱成為元素名稱,關聯表形成父子階層。最常用於主從結構(訂單-明細)。
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
需在 SELECT 清單中以 `Tag`、`Parent`、欄位別名(`ElementName!Tag!AttributeName!Directive`)定義結構。彈性最大但撰寫複雜,適合特殊格式需求(如特定 Schema 遵從)。
| 選項 | 效果 |
|---|---|
| XMLDATA | 結果前附加 XDR Schema 定義(已淘汰,建議改用 XSD) |
| ELEMENTS | 強制欄位輸出為子元素而非屬性(` |
| BINARY BASE64 | 二進位資料以 Base64 編碼輸出(預設若含二進位欄位會報錯) |
反向操作:`OPENXML` 將 XML 文件解析為資料列集供 `INSERT/UPDATE`;`XML Bulk Load` (COM 物件) 提供高效能大量匯入。配合 `xml` 資料類型(SQL 2005+),構建完整的關聯-XML 雙向整合能力。