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

SQL Server FOR XML RAW 完整指南:屬性/元素模式、NULL 處理、Schema 輸出、根元素、二進位與 XML 型別欄位查詢

     編輯:關於SqlServer

前言

FOR XML RAW 將每列輸出為單一 <row> 元素,欄位預設為**屬性**,適合簡單扁平化 XML 匯出、Web Service 回傳、異構系統整合。本文系統涵蓋 RAW 模式所有實用選項與實戰範例。

基礎查詢與 TYPE 指令


WITH TestXml AS (
    SELECT 1 AS id, N'LeeWhoeeUniversity' AS name
    UNION ALL SELECT 2, N'SQL Server XML 查詢'
    UNION ALL SELECT 3, N'FOR XML'
)
SELECT id, name FROM TestXml FOR XML RAW, TYPE;

結果 (XML 型別)





  • TYPE 指示回傳 xml 型別而非 nvarchar(max),支援後續 .query()、.value() 方法。

ELEMENTS:屬性 → 子元素


SELECT id, name FROM TestXml FOR XML RAW, ELEMENTS;

結果



  1
  LeeWhoeeUniversity


  2
  SQL Server XML 查詢


  3

  • 第三列 name 為 NULL,**預設略過該元素**。

ELEMENTS XSINIL:明確輸出 NULL 元素


SELECT id, name FROM TestXml FOR XML RAW, ELEMENTS XSINIL;

結果



  1
  LeeWhoeeUniversity


  2
  SQL Server XML 查詢


  3
  

  • 自動加入 xmlns:xsi 命名空間宣告。
  • NULL 欄位輸出 xsi:nil="true",元素存在但無內容。

XMLDATA:輸出 XML-Data Reduced Schema (舊版)


SELECT id, name FROM TestXml FOR XML RAW, XMLDATA;
  • 輸出 <Schema> 區塊描述結構 (屬性型別、長度),後接資料列。
  • **已淘汰**,僅相容舊版應用;新開發請用 XMLSCHEMA。

XMLSCHEMA:輸出 XSD Schema (標準)


SELECT id, name FROM TestXml FOR XML RAW, XMLSCHEMA;
  • 輸出標準 xsd:schema (目標命名空間 urn:schemas-microsoft-com:sql:SqlRowSetN),含型別、長度、排序規則、nullable 等完整定義。
  • 可指定自訂目標命名空間:XMLSCHEMA ('urn:my-namespace')。

BINARY BASE64:二進位資料編碼


SELECT id, CAST(name AS VARBINARY(MAX)) AS binName FROM TestXml FOR XML RAW, BINARY BASE64;
  • varbinary/image 欄位自動 Base64 編碼為文字,XML 安全傳輸。
  • 搭配 ELEMENTS 時,二進位值輸出為元素文字內容。

RAW('CustomName'):自訂行元素名稱


SELECT id, name FROM TestXml FOR XML RAW('MyRow');

結果





ROOT('RootName'):包裹根元素


SELECT id, name FROM TestXml FOR XML RAW, ROOT('MyRoot');

結果



  
  
  

查詢 XML 型別欄位:.query() 方法


DECLARE @XmlTable TABLE (xid INT, xname NVARCHAR(50), xmlcol XML);
INSERT @XmlTable VALUES 
(1, N'第一行', N''),
(2, N'第二行', N'');

SELECT xid, xname, xmlcol.query('/myroot') FROM @XmlTable FOR XML RAW;

結果



  
    
    
  


  
    
  

  • .query() 回傳 xml 型別片段,外層 FOR XML RAW 再包裝成屬性化 XML。

RAW vs PATH 選型指南

場景推薦模式理由
扁平化資料、屬性化、效能優先RAW輸出緊湊、解析快、記憶體佔用低
需自訂巢狀結構、元素名稱、混合屬性/元素PATH彈性最高、支援字串聚合技巧
主從關係自動巢狀AUTO依 JOIN 關係自動產生階層
完全手工控制 (極少用)EXPLICIT複雜度極高、不建議新專案

效能與最佳實踐

  1. 大量資料分批:FOR XML 在記憶體中組裝完整 XML,超大結果集會導致 OOM;建議分頁查詢或用 bcp 匯出。
  2. 避免 SELECT *:明確列出欄位,減少 XML 體積與網路傳輸。
  3. 索引支援:XML 型別欄位可建立 PRIMARY XML INDEX + SECONDARY XML INDEX (PATH/VALUE/PROPERTY),加速 .query()/.value()/.exist()。
  4. 編碼一致性:資料庫排序規則、XML 宣告編碼、應用層解碼三方保持一致 (建議 UTF-8/UTF-16)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved