SQL SERVER FOR XML


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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM