仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 879|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之在SQL Server 2005顶用XQuery分化XML数...

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因此我们看到,这些信息足够让我们对单个操作实现“逆操作”。<p>  本文会商SQLServer2005的新功效,它同意你将XML数据分化到干系格局中,而不用耗用太多内存。我们起首懂得一下XQuery和它在SQLServer2005中为开辟者供应的功效。  XQuery先容
  XQuery,也称作XMLQuery,是一种查询XML数据的言语,同意你提取所需的节点和元素。它由W3C界说,可用于明天的年夜多半支流数据库引擎中,如Oracle、DB2和SQLServer。
  SQLServer2005XQuery函数
  上面的四个函数是SQLServer2005中的XQuery函数。(注重,XML、XQuery语句和上面的函数都辨别巨细写。比方,SQL编译器承受XML数据中的.exist,但回绝.EXIST或.Exist。)xml.exist
  这个办法依据一个XML节点上的搜刮表达式前往一个布尔值。比方,列表A中XML代码片断中的语句将前往1(真):SELECT@x.exist(/christmaslist/person[@gift="socks"])
  这个语句前往0(假):SELECT@x.exist(/christmaslist/zach)
  因为“Socks”一词被封套,这个语句将前往0(假)。SELECT@x.exist(/christmaslist/person[@gift="socks"])
xml.value
  这个办法承受一个XQuery语句并前往一个独自值。利用列表A中一样的XML代码片断,不成以利用VALUE函数天生“betty”值,以下所示:SELECT@x.value(/christmaslist[1]/person[1]/@name,VARCHAR(20))
  而XQuery天生“zach”值。SELECT@x.value(/christmaslist[1]/person[2]/@name,VARCHAR(20))
xml.query
  这个办法承受一个XQuery并前往一个XML数据范例的实例。能够按必要将这些查询复杂或庞大化,上面是一个复杂的例子:SELECT@x.query(/christmaslist/person)
  它前往XML文件:<personname="betty"gift="camera"/>
<personname="zach"gift="elmodoll"/>
<personname="brad"gift="socks"/>
xml.nodes
  在你必要将一个XML数据范例变量中的数据分化到干系数据中时,这个办法非常有效。这个办法承受一个XQuery语句作为参数,并前往一个包括XML变量逻辑标量数据的行集。列表B中的查询使用下面界说的XML变量,并将数据分化到一个了局会合,它显现在XML变量中界说的人物姓名。
  修正OPENXML存储历程
  如今我来讲明怎样修正上周的OPENXML存储历程,使其能够使用XQuery功效。起首,我往XML变量中加载一些数据。如列表C所示。我们能够创建一个承受XML参数的历程,再使用XQuery函数把XML文件中的数据拔出一个表中,而不用使用OPENXML。如列表D所示。
  最后在数据库中使用XML仿佛有些难于处置,还要花一些工夫习气利用XQuery和Xpath查询。可是,经由一段工夫的进修今后,你就会发明在数据库中使用XML数据相称有用。
  比方,在上述存储过程当中使用XML数据,你只需挪用一次数据库,而不用像典范存储历程编程那样挪用N次数据库。这两者仿佛区分不年夜,但对一个忙碌的体系而言,使用XML数据会有很年夜好处。并且,使用XQuery而非OPENXML还会明显进步功能,对小型XML文件更是云云。
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。
爱飞 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 06:41:46 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
简单生活 该用户已被删除
板凳
发表于 2015-1-26 20:24:53 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
蒙在股里 该用户已被删除
地板
发表于 2015-2-4 20:55:38 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
兰色精灵 该用户已被删除
5#
发表于 2015-2-10 10:27:05 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-1 09:58:47 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
老尸 该用户已被删除
7#
发表于 2015-3-10 15:11:46 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
海妖 该用户已被删除
8#
发表于 2015-3-17 08:26:28 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
若相依 该用户已被删除
9#
发表于 2015-3-24 04:21:18 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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