SQLSERVER輸出XML;根據FOR XML語句設置輸出模式:RAW 、AUTO 、EXPLICIT 、PATH;模式確定產生的XML的形狀。
不推薦使用FOR XML選項的XMLDATA指令。如果是RAW 和AUTO模式,請使用XSD生成。在EXPLICIT模式下,沒有XMLDATA指令的替代項。后續版本的Microsoft SQL Server將刪除該功能。
下面為每種模式的示例詳解;
測試數據庫:Dim_RegType
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType]
結果:
1.RAW模式 :RAW 模式將為 SELECT 語句所返回行集中的每行生成一個 <row> 元素。
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML RAW
結果:
<row GHTYPEID="1" GHTYPENAME="普通掛號" ISPROFESSOR="0" />
<row GHTYPEID="2" GHTYPENAME="離休" ISPROFESSOR="0" />
2.AUTO模式:表每行數據變成了一行XML節點,其中列數據變成了XML中的屬性,如果原列值為NULL,則XML中不予體現。自動關連到相應的項目,和RAW一樣在不加Elements屬性時以這種方式返回數據
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML AUTO
結果:
<Dim_RegType GHTYPEID="1" GHTYPENAME="普通掛號" ISPROFESSOR="0" />
<Dim_RegType GHTYPEID="2" GHTYPENAME="離休" ISPROFESSOR="0" />
3.EXPLICIT模式(摘自:SQL SERVER輸出XML)
EXPLICIT 模式允許對 XML 的形狀進行更多控制。 您可以隨意混合屬性和元素來確定 XML 的形狀。由於執行查詢而生成的結果行集需要具有特定的格式。此行集格式隨后將映射為 XML 形狀。使用 EXPLICIT 模式能夠隨意混合屬性和元素、創建包裝和嵌套的復雜屬性、創建用空格分隔的值(例如 OrderID 屬性可能具有一列排序順序 ID 值)以及混合內容。但是,編寫EXPLICIT模式的查詢會比較麻煩。可以使用某些新的 FOR XML功能(例如編寫嵌套 FOR XML RAW/AUTO/PATH 模式查詢和 TYPE 指令),而不使用 EXPLICIT 模式來生成層次結構。嵌套 FOR XML 查詢可以生成使用 EXPLICIT模式可生成的任何XML。
4.PATH模式:
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML PATH
結果:
<row>
<GHTYPEID>1</GHTYPEID>
<GHTYPENAME>普通掛號</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
<row>
<GHTYPEID>2</GHTYPEID>
<GHTYPENAME>離休</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
5.ELEMENTS (摘自:SQL SERVER輸出XML)
ELEMENTS指定列作為子元素返回,即 ELEMENTS 選項指定 XML 結果是以元素為中心的。否則,列將映射到 XML 屬性。只在 RAW、AUTO 和 PATH 模式中支持該選項。
5.1 PATH:
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML PATH ,ELEMENTS
結果:
<row>
<GHTYPEID>1</GHTYPEID>
<GHTYPENAME>普通掛號</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
<row>
<GHTYPEID>2</GHTYPEID>
<GHTYPENAME>離休</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
5.2 RAW:
SELECT TOP 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML RAW ,ELEMENTS
結果:
<row>
<GHTYPEID>1</GHTYPEID>
<GHTYPENAME>普通掛號</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
<row>
<GHTYPEID>2</GHTYPEID>
<GHTYPENAME>離休</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
5.3 AUTO:
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML AUTO,ELEMENTS
結果:
<Dim_RegType>
<GHTYPEID>1</GHTYPEID>
<GHTYPENAME>普通掛號</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</Dim_RegType>
<Dim_RegType>
<GHTYPEID>2</GHTYPEID>
<GHTYPENAME>離休</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</Dim_RegType>
6.TYPE
6.1 PATH
SELECT TOP 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML PATH ,TYPE
結果:
<row>
<GHTYPEID>1</GHTYPEID>
<GHTYPENAME>普通掛號</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
<row>
<GHTYPEID>2</GHTYPEID>
<GHTYPENAME>離休</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
</row>
6.2 RAW
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML RAW,TYPE
結果:
<row GHTYPEID="1" GHTYPENAME="普通掛號" ISPROFESSOR="0" />
<row GHTYPEID="2" GHTYPENAME="離休" ISPROFESSOR="0" />
6.3 AUTO
SELECT top 2 [GHTYPEID],[GHTYPENAME],[ISPROFESSOR] FROM [Dim_RegType] FOR XML AUTO ,TYPE
結果:
<Dim_RegType GHTYPEID="1" GHTYPENAME="普通掛號" ISPROFESSOR="0" />
<Dim_RegType GHTYPEID="2" GHTYPENAME="離休" ISPROFESSOR="0" />
XML輸出的自定義:以PATH為例(本人測試下面的設置只適用與PATH和RAW模式,EXPLICIT這個模式沒有試過);將XML以文件形式輸出;
示例1:
SELECT top 2 [GHTYPEID] AS ID ,[GHTYPENAME] AS NAME,[ISPROFESSOR] AS PRO FROM [Dim_RegType] FOR XML PATH('ROOT')
結果:
<ROOT>
<ID>1</ID>
<NAME>普通掛號</NAME>
<PRO>0</PRO>
</ROOT>
<ROOT>
<ID>2</ID>
<NAME>離休</NAME>
<PRO>0</PRO>
</ROOT>
示例2:
SELECT top 2 [GHTYPEID] ,[GHTYPENAME] ,[ISPROFESSOR] FROM [Dim_RegType] FOR XML PATH('')
結果:
<GHTYPEID>1</GHTYPEID>
<GHTYPENAME>普通掛號</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>
<GHTYPEID>2</GHTYPEID>
<GHTYPENAME>離休</GHTYPENAME>
<ISPROFESSOR>0</ISPROFESSOR>