您的位置:首页 > 数据库

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

2014-04-20 00:28 344 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息