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的更多相关文章

  1. sql server中分布式查询随笔

    由于业务逻辑的多样性 经常得在sql server中查询不同数据库中数据 这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 exec sp_a ...

  2. SQL Server中时间段查询和数据类型转换

    不知道什么时候对数据独有情种,也许是因为所学专业的缘故,也许是在多年的工作中的亲身经历,无数据,很多事情干不了,数据精度不够,也很多事情干不了,有一次跟一个朋友开玩笑说,如果在写论文的时候,能有一份独 ...

  3. SQL Server中的查询

          本博文简介一下SQL Server中经常使用的几类查询及相关使用的方法.       一.ExecuteScalar方法获取单一值       ExecuteScalar方法是SqlCom ...

  4. (4.21)sql server中复制查询结果集

    在查询结果窗口中复制列标题似乎是一项简单的任务,但对于业余爱好者来说,这可能是一场噩梦. 没有可见的指令/链接/按钮,其中一个可以使用列标题单击和复制所选数据.让我们看看如何在SQL Server M ...

  5. sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)

    由于业务逻辑的多样性,经常得在sql server中查询不同数据库中数据,这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 EXEC sp_a ...

  6. SQL Server中自定义函数:用指定的分隔符号分割字符串

    微软SQL Server数据库中包含了很多内置的函数,入下图: 它们用于处理日期.数学.元数据.字符串等. 其中最为常用的就是处理字符串,里面包含了CharIndex()等函数,非常方便使用. 但是对 ...

  7. 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    其实本来只想找一个方法能查询一下 数据库 的大小,没想到这个方法还能查询数据库中 各个数据表 的大小,嗯,挺好玩的,记录一下. MSDN资料:https://msdn.microsoft.com/zh ...

  8. SQL Server 中数据查询注意事项

    1.查询语句不用区分大小写,而且即使每张表的表名或者列名出现大写字母,在写查询语句的时候也不用区分大小写,查询结果保持一致,所以查询语句小写即可. 2.在写查询语句的时候列名不需要带单引号,数值型的字 ...

  9. 关于SQL Server 中连接查询Join的几种常见用法

    现有A.B .C 三个表,A中的ID=B中的ID,B中的ID=C中的ID:也就是:A.ID=B.ID,B.ID=C.ID; 一. Inner Join 把两个表链接一起查 Select * from ...

  10. SQL Server中时间段查询

    /****** Script for SelectTopNRows command from SSMS ******/ select * from dbo.VehicleData20100901 wh ...

随机推荐

  1. 类似于qq联系人的tablview能够展开和收缩

    在.h文件中定义三个数组和一个tablview UITableView *listTable;     NSMutableArray *listArray;     NSMutableArray *p ...

  2. 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】

    传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...

  3. 基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台

    一.安装准备 1.1平台环境: CentOS 5.4 x86_64 GNU/Linux nginx-0.8.21 php-5.2.9 spawn-fcgi-1.6.3 mysql-5.1.34 .2系 ...

  4. git笔记之解决eclipse不能提交jar等文件的问题

    今天用git托管了一个java web项目,由于是web项目,所以要上传jar文件(此项目未使用maven管理),一直使用git commit and push,就是在server上看不到jar文件上 ...

  5. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

  6. uvalive 2911 Maximum(贪心)

    题目连接:2911 - Maximum 题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xpm 的最大值. 解题思路:可以将x1 + x2 ...

  7. 怎么做fastreport使用离线数据源

    近期使用做项目发现fastreport使用在线数据源.紧密耦合的数据库连接字符串.在部署稍加注意.easy错误.因此,是否想到脱机使用的数据源. 官方参考: watermark/2/text/aHR0 ...

  8. hdu1430魔板

    Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...

  9. 判断闰年(go语言版本)

    import "strconv" func IsLeapYear(y string) bool { //y == 2000, 2004 //判断是否为闰年 year, _ := s ...

  10. Android程序猿学习路径

    而一些工作,而不仅仅是通信毕业生,很多学生没有工作或熟练Android工作人员指导的情况下,,如何学习Android而提高Android更多关注的水平. 享: 1.Android知识 1.1.站点资源 ...