转帖:SQL 2005中的XQuery及对2005 XML的一些看法(作者:Woody Wu) 30vest013]

发布时间:2016-12-10 17:09:26 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"转帖:SQL 2005中的XQuery及对2005 XML的一些看法(作者:Woody Wu) 30vest013]",主要涉及到转帖:SQL 2005中的XQuery及对2005 XML的一些看法(作者:Woody Wu) 30vest013]方面的内容,对于转帖:SQL 2005中的XQuery及对2005 XML的一些看法(作者:Woody Wu) 30vest013]感兴趣的同学可以参考一下。

                                     SQL 2005中的XQuery及对2005 XML的一些看法     * SQL SERVER 2005中的XQuery       如今,SQL SERVER 2005提供了对原生XML的支持,我们已经可以把XML作为一个二进制的BLOB存储在SQL SERVER中的一个特殊列中.当然,既然提供了XML支持,当然少不了对XQuery的支持,以进行XML数据的操作功能.       在SQL SERVER 2005的XML数据类型上,MS提供了五个方法通过XQuery进行XML数据的操作.分别如下:       query(xquery expression)----该方法接收一个Xquery表达式,在该XML数据上进行检索,求值.他可以得到一个XML的片段或者是整个XML文档.(他返回的结果是一个非类型化XML的实例).       例:select xmlcol.query('/MedicalCase/Patient') from MedicalCase where id=1   检索病案号为1的病案的病人的节点.       value(xquery expression)----该方法同样接收一个Xquery表达式,在XML文档中检索,得到一个标量值(scalar values)作为一个关系型的值(通过query方法得到的值,就算用data函数得到的简单值,也是XML类型的,无法使用关系型的比较等操作,如: select xmlcol.query('data(/MedicalCase[No])') as No where No=1 是错误的,因为No是XML类型).       exist(xquery expression)----该方法接收一个Xquery表达式,来判断是否存在某一个节点或者某一个值.如果存在,则返回1,否则返回0.       例:select * from MedicalCase where xmlcol.exist('/MedicalCase/Patient[Name="woody"] = 1')       node(xquery expression)----暂时对该方法具体使用不太熟悉:(.记下来,总之呢,这个方法分解一个XML文档为一系列的关系数据.返回的是通过xquery得到的一个结果集.       modify(xquery expression)----上述的方法都是对XML文档进行检索,该方法提供了一个对XML文档进行修改,删除等操作的功能.其实Xquery 1.0标准并未提供修改XML的操作,所以MS就对其进行了扩展,在xquery的基础上增加了insert,delete,replace关键字,以达到对XML进行操作的能力.       例:update MedicalCase set xmlcol.modify('insert <Phone>12345</Phone> at first into (/MedicalCase/Patient)') where id=1     * 一些个人看法       由于我们目前做的项目全面采用XML格式进行数据的存储,进行了一段时间的工作以后,对此有点个人看法,不管对错,先记录下来.       通过采用XML,我觉得一个最大的好处就是能真正的运用面向对象的方式去分析,考虑问题.这一点,在linkin的这篇随笔中已经提到.在这里,我主要想写写一些感觉不太好的地方.前面提到这样做最大的好处就是面向对象,但我觉得同时这也是他一个不好的地方.因为要按照面向对象的思想,这样,有关联的一类对象就要按照他们之间的关系,做为一个大的对象存放在数据库表中的一个XML字段中,把这种对象存放在关系数据库中始终让我觉得别扭.尽管SQL 2005提供了对XQuery全面的支持,但是在实际操作的时候,往往有时候觉得力不从心,或者大材小用的感觉.例如:有些时候要修改一个对象的某个属性,就要把整个对象读出来,按照对象的方式修改其值,然后才整个保存回去(当然,通过XML DML操作也可以达到同样的目的,但一来这变失去了面向对象的方式,二来目前MS扩展XQuery的非读操作我老感觉不够强大,不能象T-SQL那样灵活).另外,某些时候,当相关的两个对象存储在两张表的XML字段中的时候,要获取两个对象的信息,就要访问两次数据库才能实现,这种情形下,个人感觉现在流行的ORM框架处理这种情况就要自然得多.       记得原来在网上看到过一些评论,ORM是面向对象编程和关系数据库之间的一个无奈的选择,ORM的命不会太长.现在感觉SQL 2005在这方面又迈出了一步,尽管,在我看来还不是最完美的.有机会还是学习学习真正的面向对象数据库. ----2005.10.29 23:50 星期六

学习。

老夫的项目,只在树形数据静态缓存情况下才使用XML。

学习的

上一篇:Select Count(b.topic) 20yanfeifei]
下一篇:如何利用SQL Server 2005分布式分区视图分解数据表 30vest014]

相关文章

相关评论