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

系统 1951 0

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



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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论