SQL SERVER中XML查询:FOR XML指定PATH
前言
在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH。本文用一些实例介绍SQL SERVER中指定PATH的XML查询。
PATH參数
不带名称的列
具有名称的列
列名以 @ 符号开头
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',' ', 'Li' for xml path
insert into @table select 'Hui', '<root><person></person></root>'
select name,xmlcontent as [*] from @table for xml path
<name>Hui</name>
<root>
<person />
</root>
</row>
列名为 XPath 节点測试的列
列名 |
行为 |
---|---|
text() |
对于名为 text() 的列,该列中的字符串值将被加入为文本节点。 |
comment() |
对于名为 comment() 的列,该列中的字符串值将被加入为 XML 凝视。 |
node() |
对于名为 node() 的列,结果与列名为通配符 (*) 时同样。 |
处理指令(名称) |
假设列名为处理指令,该列中的字符串值将被加入为此处理指令目标名称的 PI 值。 |
演示样例:
<first>Hui</first>
<last>Li</last>
<fullname>
<!--Hui Li-->
</fullname>
<?PI test?>
</row>
带有指定为 data() 的路径的列名
as
(
select 11 as id
union all
select 22
union all
select 33
)
select id as [data()] from T for xml path ('')
NULL值列
<name>hui</name>
</row>
<name>hui</name>
<address xsi:nil="true" />
</row>
PATH 模式中的命名空间支持
SELECT 1 as 'a:b'
FOR XML PATH
<a:b>1</a:b>
</row>