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查詢就全部介紹完畢。
- SQL SERVER中XML查詢:FOR XML指定RAW
- SQL SERVER中XML查詢:FOR XML指定AUTO
- SQL SERVER中XML查詢:FOR XML指定EXPLICIT
- SQL SERVER中XML查詢:FOR XML指定PATH
- 關於XML類型,請參考:http://blog.csdn.net/leewhoee/article/details/8571286
- 關於XML索引,請參考:http://blog.csdn.net/leewhoee/article/details/8579743