在 SQL Server 中,我們可以透過 FOR XML PATH 子句輕鬆產生具有自訂根節點與子節點的 XML 輸出。這對於資料交換、API 回應或報表匯出等情境非常實用。
最簡單的形式是指定子節點名稱與根節點名稱:
SELECT *
FROM table_name
FOR XML PATH('child'), ROOT('parent');
執行後會產生類似以下結構的 XML:
<parent>
<child>...</child>
<child>...</child>
</parent>
當需要將主表與從表資料整合在同一個 XML 階層中時,可以使用子查詢搭配 TYPE 指示詞,將子查詢結果作為 XML 片段嵌入主查詢:
SELECT *,
(SELECT *
FROM subTable
WHERE subTable.id = master.id
FOR XML PATH('child'), ROOT('parent'), TYPE)
FROM master
FOR XML PATH('child'), ROOT('parent');
關鍵點說明:
TYPE:指示子查詢回傳 xml 型別,而非 nvarchar(max),避免雙重編碼。ROOT('parent') 會為從表資料建立一個包裹元素。FOR XML PATH 定義主表的輸出結構。FOR XML PATH('Item'), ROOT('Items') 即可。SELECT *。FOR XML PATH 搭配 OFFSET/FETCH 分頁,避免單次傳輸過大。掌握 FOR XML PATH 的靈活運用,能大幅簡化應用層的 XML 組裝邏輯,讓資料庫直接輸出符合規格的結構化文件。