架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 11656|回复: 1

sql xml 入门教程

[复制链接]
发表于 2016-6-14 17:23:13 | 显示全部楼层 |阅读模式

  1. /*
  2. sql xml 入门:
  3.     --by jinjazz
  4.     --http://blog.csdn.net/jinjazz
  5.    
  6.     1、xml:        能认识元素、属性和值
  7.    
  8.     2、xpath:    寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁)
  9.                
  10.                 语法格式,这些语法可以组合为条件:
  11.                 "."表示自己,".."表示父亲,"/"表示儿子,"//"表示后代,
  12.                 "name"表示按名字查找,"@name"表示按属性查找
  13.                
  14.                 "集合[条件]" 表示根据条件取集合的子集,条件可以是
  15.                     数  值:数字,last(),last()-数字 等
  16.                     布尔值:position()<数字,@name='条件',name='条件'
  17.                 条件是布尔值的时候可以合并计算:and or
  18.    
  19.     3、xquery:    基于xpath标的准查询语言,sqlserver xquery包含如下函数
  20.                 exist(xpath条件):返回布尔值表示节点是否存在
  21.                 query(xpath条件):返回由符合条件的节点组成的新的xml文档
  22.                 value(xpath条件,数据类型):返回指定的标量值,xpath条件结果必须唯一
  23.                 nodes(xpath条件): 返回由符合条件的节点组成的一行一列的结果表
  24. */

  25. declare @data xml
  26. set @data='
  27. <bookstore>
  28. <book category="COOKING">
  29.   <title lang="en">Everyday Italian</title>
  30.   <author>Giada De Laurentiis</author>
  31.   <year>2005</year>
  32.   <price>30.00</price>
  33. </book>
  34. <book category="CHILDREN">
  35.   <title lang="jp">Harry Potter</title>
  36.   <author>J K. Rowling</author>
  37.   <year>2005</year>
  38.   <price>29.99</price>
  39. </book>
  40. <book category="WEB">
  41.   <title lang="en">XQuery Kick Start</title>
  42.   <author>James McGovern</author>
  43.   <author>Per Bothner</author>
  44.   <author>Kurt Cagle</author>
  45.   <author>James Linn</author>
  46.   <author>Vaidyanathan Nagarajan</author>
  47.   <year>2003</year>
  48.   <price>49.99</price>
  49. </book>
  50. <book category="WEB">
  51.   <title lang="cn">Learning XML</title>
  52.   <author>Erik T. Ray</author>
  53.   <year>2003</year>
  54.   <price>39.95</price>
  55. </book>
  56. </bookstore>
  57. '

  58. --测试语句,如果不理解语法请参考上面的xpath规则和xquery函数说明

  59. --1、文档
  60. select @data
  61. --2、任意级别是否存在price节点
  62. select @data.exist('//price')
  63. --3、获取所有book节点
  64. select @data.query('//book')
  65. --4、获取所有包含lang属性的节点
  66. select @data.query('//*[@lang]')
  67. --5、获取第一个book节点
  68. select @data.query('//book[1]')
  69. --6、获取前两个book节点
  70. select @data.query('//book[position()<=2]')
  71. --7、获取最后一个book节点
  72. select @data.query('//book[last()]')
  73. --8、获取price>35的所有book节点
  74. select @data.query('//book[price>35]')
  75. --9、获取category="WEB"的所有book节点
  76. select @data.query('//book[@category="WEB"]')
  77. --10、获取title的lang="en"的所有book节点
  78. select @data.query('//book/title[@lang="en"]')
  79. --11、获取title的lang="en"且 price>35的所有book节点
  80. select @data.query('//book[./title[@lang="en"] or price>35 ]')
  81. --12、获取title的lang="en"且 price>35的第一book的(第一个)title
  82. select @data.query('//book[./title[@lang="en"] and price>35 ]').value('(book/title)[1]','varchar(max)')
  83. --13、等价于12
  84. select @data.value('(//book[./title[@lang="en"] and price>35 ]/title)[1]','varchar(max)')
  85. --14、获取title的lang="en"且 price>35的第一book的(第一个)title的lang属性
  86. select @data.value('((//book[@category="WEB" and price>35 ]/title)[1]/@lang)[1]','varchar(max)')
  87. --15、获取第一本书的title
  88. select Tab.Col.value('(book/title)[1]','varchar(max)') as title
  89.     from @data.nodes('bookstore')as Tab(Col)
  90. --16、获取每本书的第一个author
  91. select Tab.Col.value('author[1]','varchar(max)') as title
  92.     from @data.nodes('//book')as Tab(Col)
  93. --17、获取所有book的所有信息
  94. select
  95. T.C.value('title[1]','varchar(max)') as title,
  96. T.C.value('year[1]','int') as year,
  97. T.C.value('title[1]','varchar(max)')as title,
  98. T.C.value('price[1]','float') as price,
  99. T.C.value('author[1]','varchar(max)') as author1,
  100. T.C.value('author[2]','varchar(max)') as author2,
  101. T.C.value('author[3]','varchar(max)') as author3,
  102. T.C.value('author[4]','varchar(max)') as author4
  103. from @data.nodes('//book') as T(C)
  104. --18、获取不是日语(lang!="jp")且价格大于35的书的所有信息
  105. select
  106. T.C.value('title[1]','varchar(max)') as title,
  107. T.C.value('year[1]','int') as year,
  108. T.C.value('title[1]','varchar(max)')as title,
  109. T.C.value('price[1]','float') as price,
  110. T.C.value('author[1]','varchar(max)') as author1,
  111. T.C.value('author[2]','varchar(max)') as author2,
  112. T.C.value('author[3]','varchar(max)') as author3,
  113. T.C.value('author[4]','varchar(max)') as author4
  114. from @data.nodes('//book[./title[@lang!="jp"] and price>35 ]') as T(C)
复制代码






上一篇:mysql中用HEX和UNHEX函数处理二进制数据的导入导出
下一篇:ASP.NET MVC 给ViewBag赋值Html字符转义问题
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-4-24 14:21:30 | 显示全部楼层
前两天还在找这个~
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-6-16 09:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表