因胸联盟 发表于 2015-1-16 22:15:37

MSSQL编程:sql xml进门:xpath和xquery

对于update操作,event中依次记录旧行,新行的值。</p>/*
sqlxml进门:
--byjinjazz
--http://blog.csdn.net/jinjazz

1、xml:能熟悉元素、属性和值

2、xpath:寻址言语,相似windows目次的查找(没用过dir命令的话就往面壁)

语法格局,这些语法能够组合为前提:
"."暗示本人,".."暗示父亲,"/"暗示儿子,"//"暗示儿女,
"name"暗示按名字查找,"@name"暗示按属性查找

"汇合[前提]"暗示依据前提取汇合的子集,前提能够是
数值:数字,last(),last()-数字等
布尔值:position()<数字,@name=前提,name=前提
前提是布尔值的时分能够兼并盘算:andor

3、xquery:基于xpath标的准查询言语,sqlserverxquery包括以下函数
exist(xpath前提):前往布尔值暗示节点是不是存在
query(xpath前提):前往由切合前提的节点构成的新的xml文档
value(xpath前提,数据范例):前往指定的标量值,xpath前提了局必需独一
nodes(xpath前提):前往由切合前提的节点构成的一行一列的了局表
*/
declare@dataxml
set@data=
<bookstore>
<bookcategory="COOKING">
<titlelang="en">EverydayItalian</title>
<author>GiadaDeLaurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<bookcategory="CHILDREN">
<titlelang="jp">HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<bookcategory="WEB">
<titlelang="en">XQueryKickStart</title>
<author>JamesMcGovern</author>
<author>PerBothner</author>
<author>KurtCagle</author>
<author>JamesLinn</author>
<author>VaidyanathanNagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<bookcategory="WEB">
<titlelang="cn">LearningXML</title>
<author>ErikT.Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

--测试语句,假如不睬解语法请参考下面的xpath划定规矩和xquery函数申明
--1、文档
select@data
--2、恣意级别是不是存在price节点
select@data.exist(//price)
--3、猎取一切book节点
select@data.query(//book)
--4、猎取一切包括lang属性的节点
select@data.query(//*[@lang])
--5、猎取第一个book节点
select@data.query(//book)
--6、猎取前两个book节点
select@data.query(//book)
--7、猎取最初一个book节点
select@data.query(//book)
--8、猎取price>35的一切book节点
select@data.query(//book)
--9、猎取category="WEB"的一切book节点
select@data.query(//book[@category="WEB"])
--10、猎取title的lang="en"的一切book节点
select@data.query(//book/title[@lang="en"])
--11、猎取title的lang="en"且price>35的一切book节点
select@data.query(//book[./title[@lang="en"]orprice>35])
--12、猎取title的lang="en"且price>35的第一book的(第一个)title
select@data.query(//book[./title[@lang="en"]andprice>35]).value((book/title),varchar(max))
--13、等价于10
select@data.value((//book[./title[@lang="en"]andprice>35]/title),varchar(max))
--14、猎取title的lang="en"且price>35的第一book的(第一个)title的lang属性
select@data.value(((//book[@category="WEB"andprice>35]/title)/@lang),varchar(max))
--15、猎取第一本书的title
selectTab.Col.value((book/title),varchar(max))astitle
from@data.nodes(bookstore)asTab(Col)
--16、猎取每本书的第一个author
selectTab.Col.value(author,varchar(max))astitle
from@data.nodes(//book)asTab(Col)
--17、猎取一切book的一切信息
select
T.C.value(title,varchar(max))astitle,
T.C.value(year,int)asyear,
T.C.value(title,varchar(max))astitle,
T.C.value(price,float)asprice,
T.C.value(author,varchar(max))asauthor1,
T.C.value(author,varchar(max))asauthor2,
T.C.value(author,varchar(max))asauthor3,
T.C.value(author,varchar(max))asauthor4
from@data.nodes(//book)asT(C)
--18、猎取不是日语(lang!="jp")且代价年夜于35的书的一切信息
select
T.C.value(title,varchar(max))astitle,
T.C.value(year,int)asyear,
T.C.value(title,varchar(max))astitle,
T.C.value(price,float)asprice,
T.C.value(author,varchar(max))asauthor1,
T.C.value(author,varchar(max))asauthor2,
T.C.value(author,varchar(max))asauthor3,
T.C.value(author,varchar(max))asauthor4
from@data.nodes(//book[./title[@lang!="jp"]andprice>35])asT(C)
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

金色的骷髅 发表于 2015-1-19 06:18:59

是要和操作系统进行Socket通讯的场景。否则建议慎重!

深爱那片海 发表于 2015-1-27 05:56:59

换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的

小魔女 发表于 2015-2-5 03:31:53

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

山那边是海 发表于 2015-2-11 03:44:55

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

小女巫 发表于 2015-3-11 00:09:18

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

兰色精灵 发表于 2015-3-17 16:22:56

从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。

飘灵儿 发表于 2015-3-24 13:01:44

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
页: [1]
查看完整版本: MSSQL编程:sql xml进门:xpath和xquery