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

SQL Server 與 XML 整合核心:FOR XML 子句四大模式實戰詳解

     編輯:關於SqlServer

SQL Server 透過 FOR XML 子句將查詢結果直接序列化為 XML,支援 RAW、AUTO、EXPLICIT、PATH 四種模式,滿足從簡單屬性導出到複雜巢狀結構的各類需求。

四大模式對照

模式特性適用場景
RAW每列產生 <row .../> 元素,欄位對應屬性簡單平面 XML、快速匯出、Web Service 回傳
AUTO依 JOIN 關係自動產生巢狀元素,資料表名為元素名主從結構 (訂單-明細)、快速產生階層 XML
EXPLICIT完全控制結構,需在 SELECT 中指定 Tag/Parent/欄位屬性高度客製化 XML 結構、符合特定 XSD
PATH以欄位別名路徑定義元素/屬性 (如 @Attr, Element/Sub)介於 AUTO 與 EXPLICIT 間,直觀易維護 (2005+)

RAW 模式範例

SET ROWCOUNT 3;
SELECT OrderID, OrderDate, ProductID
FROM Orders JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID
ORDER BY OrderID
FOR XML RAW;
輸出:



AUTO 模式範例

SELECT OrderID, OrderDate, ProductID
FROM Orders JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID
ORDER BY OrderID
FOR XML AUTO;
輸出:

  
  
  

PATH 模式範例 (推薦取代 EXPLICIT)

SELECT
    OrderID AS '@OrderID',
    OrderDate AS '@OrderDate',
    (SELECT ProductID AS '@ProductID'
     FROM [Order Details] od WHERE od.OrderID = o.OrderID
     FOR XML PATH('OrderDetail'), TYPE) AS OrderDetails
FROM Orders o
WHERE OrderID = 10248
FOR XML PATH('Order'), ROOT('Orders');
輸出:

  
    
      
      
      
    
  

常用選項

  • ELEMENTS:強制產生子元素而非屬性 (RAW/AUTO/PATH 皆適用)。
  • XMLDATA / XMLSCHEMA:附加 XDR/XSD 結構描述。
  • BINARY BASE64:二進位欄位以 Base64 編碼。
  • ROOT('RootName'):包裝單一根元素。
  • TYPE:回傳 xml 型別而非 nvarchar(max),可直接鏈式處理。

結語

FOR XML 將關聯資料無縫轉換為 XML,PATH 模式以直觀路徑語法取代複雜的 EXPLICIT,成為主流選擇。善用 TYPE 導向 xml 型別,配合 XQuery/XPath 進一步處理,構建完整關聯-XML 橋樑。

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