/*
T-SQL 支持用于查询 XML 数据类型的 XQuery 语言的子集。
XQuery 基于现有的 XPath 查询语言,并支持更好的迭代、更好的排序结果以及构造必需的 XML 的功能。
在前面我们已经学习了 XPath 的基本语法,本章将学习T-SQL 的 XQuery 语法
------------------------------------------------------------------------------------------------------------------
T-SQL XQuery包含如下函数
query(XPath条件): 结果为 xml 类型; 返回由符合条件的节点组成的非类型化的 XML 实例
value(XPath条件,数据类型):结果为指定的标量值类型; xpath条件结果必须唯一
exist(XPath条件):结果为布尔值; 表示节点是否存在,如果执行查询的 XML 数据类型实例包含NULL则返回NULL
nodes(XPath条件): 返回由符合条件的节点组成的一行一列的结果表
*/ DECLARE @x XML
SET @x='
<root>
<rogue id="001">
<hobo id="1">
<name>彪</name>
<name>阿彪</name>
<type>流氓</type>
</hobo>
</rogue>
<rogue id="002">
<hobo id="2">
<name>光辉</name>
<name>二辉</name>
<type>流氓</type>
</hobo>
</rogue>
<rogue id="001">
<hobo id="3">
<name>小德</name>
<name>小D</name>
<type>臭流氓</type>
</hobo>
</rogue>
</root>'
--取root的所有子节点
--SELECT @x.query('root'),@x.query('/root'),@x.query('.')
--/*注释:
-- 这里实际上是取所有节点,root 必须是最高级节点名称,当换成任意子节点都是取不到值的
--*/
--取 hobo 的所有子节点,不管 hobo 在文档中的位置。
SELECT @x.query('//hobo')
----扩展:取rogue下 所有 name
SELECT @x.query('//rogue//name')
--取属性为id 的所有节点
SELECT @x.query('//hobo[@id]')
/*注释:
XQuery不支持直接顶级 attribute 节点,必须附带上对节点的查找
属性必须要加[]
*/
--选取属于 root 子元素的第一个 rogue 元素。
SELECT @x.query('/root/rogue[1]')
--选取属于 root 子元素的最后一个 rogue 元素。
SELECT @x.query('/root/rogue[last()]')
--选取属于 root 子元素的倒数第二个 rogue 元素。
SELECT @x.query('/root/rogue[last()-1]')
--选取最前面的两个属于 root 元素的子元素的 rogue 元素。
SELECT @x.query('/root/rogue[position()<3]')
--选取 root 元素的所有 hobo 元素,且其中的属性 id 的值须大于 1。
SELECT @x.query('/root//hobo[@id>1]')
----扩展: root 元素的所有 hobo 元素,且其中的属性 id 的值须大于 1 并且子节点 name 的值为 光辉 的。
SELECT @x.query('/root/rogue[./hobo[@id>1 and name="光辉"]]')
--选取 root 子元素的所有 rogue 元素,且 属性id 的值须大于 为001 子元素hobo 属性 id 的值为 1的
SELECT @x.query('/root/rogue[@id="001" and ./hobo[@id=1]]')
--if then else 表达式
SELECT @x.query('
if ( 1=2 ) then
/root/rogue[@id="001"]
else
/root/rogue[@id="002"]
') --路径表达式步骤中的谓词
SELECT @x.query('/root/rogue[1]/hobo/name')--选择第一个 /root/rogue 节点下的所有 <Name> 元素。
SELECT @x.query('/root/rogue/hobo[1]/name')--选择 /root/rogue/hobo 节点下的所有 <Name> 元素。
SELECT @x.query('/root/rogue/hobo/name[1]')--选择 /root/rogue/hobo 节点下的所有第一个 <Name> 元素。
SELECT @x.query('(/root/rogue/hobo/name)[1]')--选择 /root/rogue/hobo 节点下的第一个 <Name> 元素。
--使用聚合函数
SELECT @x.query('count(/root/rogue/hobo/name)'),@x.query('count(/root/rogue/hobo/name[1])')
--FLWOR 迭代语法。FLWOR 是 for、let、where、order by 和 return 的缩写词。
--
SELECT @x.query('
<result>
{ for $i in /root/rogue/hobo/name[1]
return string($i)
}
</result>')
--
SELECT @x.query('
for $Loc in /root/rogue/hobo,
$FirstStep in $Loc/name[1]
return
string($FirstStep)
')
--
SELECT @x.query('
for $i in /root/rogue/hobo
order by $i/@id descending
return string($i/name[1])
')
--
SELECT @x.query('
for $i in /root/rogue/hobo
order by local-name($i)
return string($i/name[1])
')

T-SQL XQuery (XML路径查询) (转)http://blog.csdn.net/Beirut/article/details/8150116的更多相关文章

  1. tomcat配置文件server.xml详解 转载http://blog.csdn.net/yuanxuegui2008/article/details/6056754

    元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat 的请求 shutdown 指定向端口发送的命令字符串 service name 指定service 的名字 ...

  2. 获取某月第一天,最后一天的sql server脚本 【转】http://blog.csdn.net/chaoowang/article/details/9167969

    这是计算一个月第一天的SQL 脚本:    SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DA ...

  3. Spring配置xml自动提示——转载https://blog.csdn.net/sinat_18474835/article/details/79370629

    以Spring2.0为例: 下载地址: Csdn: http://download.csdn.net/download/hh775313602/9812757 没积分的可以去百度网盘下载,我已共享: ...

  4. Mysql SQL查询今天、昨天、n天内、第n天------https://blog.csdn.net/baidu_27222643/article/details/60467585

    Mysql SQL查询今天.昨天.n天内.第n天 https://blog.csdn.net/baidu_27222643/article/details/60467585

  5. PL/SQL常用设置 可看引用位置更清晰直观 引自:http://blog.csdn.net/xiaoqforever/article/details/27695569

    引自:http://blog.csdn.net/xiaoqforever/article/details/27695569 1,登录后默认自动选中My Objects 默认情况下,PLSQL Deve ...

  6. maven 依赖文件 pom.xml 编译 mvn compile 运行 不用mvn exec:java -Dexec.mainClass="hello.HelloWorld" 打成jar包 mvn package mvn install http://blog.csdn.net/yaya1943/article/details/48464371

    使用maven编译Java项目 http://blog.csdn.net/yaya1943/article/details/48464371  使用"mvn clean"命令清除编 ...

  7. 使用Mybatis进行连表查询、left join---https://blog.csdn.net/jinzhencs/article/details/51980518

    使用Mybatis进行连表查询.left join https://blog.csdn.net/jinzhencs/article/details/51980518

  8. XML操作:1.XML类(http://blog.csdn.net/happy09li/article/details/7460521)

    XML绑定TreeView private void XmlOperation_Load(object sender, EventArgs e) { path = AppDomain.CurrentD ...

  9. 转-decorators.xml的用法-http://blog.csdn.net/gavinloo/article/details/7458062

    今天改前人做的项目,用struts2,spring,hibernate框架做的,对了,还有jQuery.我用jquery做异步请求到后台,生成json数据返回前台生成下拉输入框,请求到后台以后,成功生 ...

随机推荐

  1. Javascript的websocket的使用方法

    javascript websocket接口 web实现客户端和服务端双向发送消息的方法有: 轮询,客户端定期向服务端请求: 长轮询,客户端定期向服务端请求,服务端只有有信息发送的时候才返回respo ...

  2. 今年的IT大趋势是虚拟现实

    从今年下半年开始,陆陆续续出现了一些基于虚拟现实技术的创业公司,先是从IT新闻中的一篇创业故事中了解到这个方向,后来再是身边一个以前的朋友也发布了类似的产品. 从他们的产品来看,基本都是围绕教育行业开 ...

  3. javascript-代码复用模式

    代码复用模式 1)使用原型继承            函数对象中自身声明的方法和属性与prototype声名的对象有什么不同:      自身声明的方法和属性是静态的, 也就是说你在声明后,试图再去增 ...

  4. 优化函数式编程:向 PHP 移植 Clojure 函数

    许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ...

  5. strspn和strcspn妙用

    http://blog.csdn.net/aidenliu/article/details/5460201

  6. Android Service 生命周期和使用注意项

    一.基础知识 服务一般分为两种: 1:本地服务, Local Service 用于应用程序内部.在Service可以调用Context.startService()启动,调用Context.stopS ...

  7. laravel 模板 blade

    控制器布局 在Laravel框架中使用模板的一种方法就是通过控制器布局.通过在控制器中指定 layout 属性,对应的视图会被创建并且作为请求的默认返回数据. 在控制器中定义一个布局 class Us ...

  8. absolute和relative的几个Demo

    这些例子最好通过FireFox结合FireBug调试查看 1.absolute让元素inline-block化 <!DOCTYPE html> <html xmlns="h ...

  9. hdu4655Cut Pieces

    http://acm.hdu.edu.cn/showproblem.php?pid=4655 先以最大的来算为 N*所有的排列数  再减掉重复的 重复的计算方法:取相邻的两个数的最小值再与它前面的组合 ...

  10. 结构体dict_index_t;

    /** InnoDB B-tree index */ typedef struct dict_index_struct dict_index_t; /** Data structure for an ...