SQL Server 內建強大的 XML 支援,可將查詢結果直接序列化為 XML,並透過 HTTP 端點對外發布。本文系統整理 `FOR XML` 四大模式、XML Schema/Data 選項、`ELEMENTS`/`BINARY BASE64` 指令,以及 IIS 整合發布 XML 的完整配置步驟與 URL 呼叫範例。
SELECT ... FROM table
FOR XML { RAW | AUTO | EXPLICIT | PATH }
[ , XMLDATA ] [ , ELEMENTS ] [ , BINARY BASE64 ]
輸出為**無根節點的 XML 片段**,需搭配 `ROOT('根節點名')` 產生完整 XML 文件。
每列輸出為 `
根據查詢表關係自動產生巢狀結構:`<表名 欄位="值" ...><子表名 ... />表名>`,啟發式推導階層,適合快速原型。
**完全手工控制**輸出結構,需在 SELECT 中使用特定欄位名 (`Tag`、`Parent`、`SortOrder` 等) 定義階層,彈性最高但複雜度高,舊版本常用。
使用 XPath 風格欄位別名定義結構:`SELECT col1 AS '@attr', col2 AS 'child/element' ... FOR XML PATH('node'), ROOT('root')`,直觀易維護,取代 EXPLICIT。
| 選項 | 效果 |
|---|---|
| XMLDATA | 輸出前置 XDR Schema (舊標準),` |
| ELEMENTS | 強制欄位以**子元素**而非屬性輸出:` |
| BINARY BASE64 | 二進制資料 (image/varbinary) 以 Base64 編碼輸出 |
| ROOT('名稱') | 包裹根節點,產出完整 XML 文件 |
https://localhost/Test?sql=SELECT+*+FROM+table+FOR+XML+AUTO&root=root
https://localhost/Test?template=SELECT+*+FROM+table+FOR+XML+AUTO
建立 `template.xml` 放置虛擬目錄下:
SELECT * FROM table FOR XML AUTO
呼叫:`https://localhost/Test/template.xml`
https://localhost/Test/template.xml/col[@attr="value"]
模板檔案 URL 後直接接 XPath 表達式過濾結果。