SQL SERVER中XML查詢:FOR XML指定PATH

來源:互聯網
上載者:User

SQL SERVER中XML查詢:FOR XML指定PATH
前言

在SQL SERVER中,XML查詢可以指定RAW,AUTO,EXPLICIT,PATH。本文用一些執行個體介紹SQL SERVER中指定PATH的XML查詢。



PATH參數
PATH('參數'),參數是用來重新命名ROW的,ROW是預設產生的名稱。select 'Hui' for xml path  結果:<row>Hui</row>
select 'Hui' for xml path ('root') 結果:<root>Hui</root>

不帶名稱的列
select 'Hui Li' for xml path
結果:<row>Hui Li</row>
具有名稱的列
列名以 @ 符號開頭
select 'Hui Li' as [@name] for xml path  結果:<row name="Hui Li" />
列名不以 @ 符號開頭

select 'Hui Li' as [name] for xml path  結果:
<row>
  <name>Hui Li</name>
</row>

列名不以 @ 符號開頭並包含斜杠標記 (/)
select 'Hui' as [name/first] for xml path  結果:
<row>
  <name>
    <first>Hui</first>
  </name>
</row>

多個列共用同一首碼

select 'Hui' as [name/first],'Li' as [name/last] for xml path  結果:
<row>
  <name>
    <first>Hui</first>
    <last>Li</last>
  </name>
</row>注意大小寫敏感。

共用同一首碼多列被打斷順序
select 'Hui' as [name/first],'Chicago' as [address],'Li' as [name/last] for xml path  結果:
<row>
  <name>
    <first>Hui</first>
  </name>
  <address>Chicago</address>
  <name>
    <last>Li</last>
  </name>
</row>


稱指定為萬用字元的列
select 'Hui' as [*],' ' as [*], 'Li' as [*] for xml path
select 'Hui',' ', 'Li' for xml path
上面兩個SQL語句執行結果相同:<row>Hui Li</row>
如果是XML類型,則作為一個子項目插入XML樹。declare @table table(name varchar(50), xmlcontent xml)
insert into @table select 'Hui', '<root><person></person></root>'
select name,xmlcontent as [*] from @table for xml path
結果:<row>
  <name>Hui</name>
  <root>
    <person />
  </root>
</row>
列名為 XPath-節點測試的列

列名

行為

text()

對於名為 text() 的列,該列中的字串值將被添加為文本節點。

comment()

對於名為 comment() 的列,該列中的字串值將被添加為 XML 注釋。

node()

對於名為 node() 的列,結果與列名為萬用字元 (*) 時相同。

處理指示(名稱)

如果列名為處理指示,該列中的字串值將被添加為此處理指示目標名稱的 PI 值。


樣本:select 'Hui' as [first/text()],'Li' as [last/node()],'Hui Li' as [fullname/comment()],'test' as "processing-instruction(PI)" for xml path結果:<row>
  <first>Hui</first>
  <last>Li</last>
  <fullname>
    <!--Hui Li-->
  </fullname>
  <?PI test?>
</row>
帶有指定為 data() 的路徑的列名
如果被指定為列名的路徑為 data(),則在產生的 XML 中,該值將被作為一個原子值來處理。如果序列化中的下一項也是一個原子值,則將向 XML 中添加一個空格字元。這在建立清單類型化元素值和屬性值時很有用。
with T
as
(
select 11 as id
union all
select 22
union all
select 33
)
select id as [data()] from T for xml path ('')
結果:11 22 33
這裡的('')可以理解為把XML的根項目名稱設為空白。
NULL值列
select 'hui' as [name],null as [address] for xml path
結果:<row>
  <name>hui</name>
</row>
沒有任何相關address的內容,指定ELEMENTS XSINIL後:select 'hui' as [name],null as [address] for xml path ,ELEMENTS XSINIL
結果:<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <name>hui</name>
  <address xsi:nil="true" />
</row>
PATH 模式中的命名空間支援
WITH XMLNAMESPACES(N'樂可樂可的部落格' as a)
SELECT 1 as 'a:b'
FOR XML PATH
結果:<row xmlns:a="樂可樂可的部落格">
  <a:b>1</a:b>
</row>
總結
以上對指定EXPLICIT的XML查詢就介紹完了。到此為止,SQL SERVER中的 指定RAW,AUTO,EXPLICIT,PATH的XML查詢就全部介紹完畢。

  1. SQL SERVER中XML查詢:FOR XML指定RAW
  2. SQL SERVER中XML查詢:FOR XML指定AUTO
  3. SQL SERVER中XML查詢:FOR XML指定EXPLICIT
  4. SQL SERVER中XML查詢:FOR XML指定PATH
  5. 關於XML類型,請參考:http://blog.csdn.net/leewhoee/article/details/8571286
  6. 關於XML索引,請參考:http://blog.csdn.net/leewhoee/article/details/8579743



相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.