zoukankan      html  css  js  c++  java
  • sqlserver2005提供的xml数据类型操作xml串

    DECLARE @data XML
    SET @data='<bookstore>
    <book category="WEB" price="50" year="2009"><title lang="en">asp.net</title><author>董浩</author><author>钱多多</author></book>
    <book category="计算机" price="37" year="2012"><title lang="chs">java入门</title><author>蔡得志</author></book>
    </bookstore>'
    SELECT @data
    --获取category="WEB"且 price>35的第一book的(第一个)title的lang属性
    select @data.value('((//book[@category="WEB" and @price>35 ]/title)[1]/@lang)[1]','varchar(max)')
    /*output:
    en
    */
    --获取第一本书的title
    select @data.value('(/bookstore/book[position()=1]/title)[1]','varchar(max)') AS 'titleOf1stBook'
    
    --========根据属性名称查询--========
    --获取第一个book节点的名为category的属性值
    DECLARE @attr VARCHAR(20)
    SELECT @attr = 'category'
    select @data.value('(/bookstore/book/@*[local-name()=sql:variable("@attr")])[1]','VARCHAR(20)')
    /*output:
    asp.net
    */--========映射为表结构查询--========
    
    --获取每本书的第一个author
    select Tab.Col.value('author[1]','varchar(max)') as author
        from @data.nodes('//book')as Tab(Col) 
    
    
    --获取所有book的所有信息
    select
    T.C.value('title[1]','varchar(max)') as title,
    T.C.value('@year[1]','int') as year,
    T.C.value('@price[1]','float') as price,
    T.C.value('author[1]','varchar(max)') as author1,
    T.C.value('author[2]','varchar(max)') as author2,
    T.C.value('author[3]','varchar(max)') as author3
    from @data.nodes('//book') as T(C)
    
    
    --获取不是日语(lang!="jp")且价格大于35的书的所有信息
    select
    T.C.value('title[1]','varchar(max)') as title,
    T.C.value('@year[1]','int') as year,
    T.C.value('@price[1]','float') as price,
    T.C.value('author[1]','varchar(max)') as author1,
    T.C.value('author[2]','varchar(max)') as author2,
    T.C.value('author[3]','varchar(max)') as author3
    from @data.nodes('//book[./title[@lang!="jp"] and @price>35 ]') as T(C)
      --========模糊查询--=========
    --查询第一个book节点的第一个属性值
    SELECT    @data.value('(/bookstore/book[1]/@*[position()=1])[1]','VARCHAR(20)')
    /*output:
    COOKING
    */ 
    --=========查询属性数量--=========
    --查询第一个book节点的属性数量
    SELECT    @data.value('count(/bookstore/book[1]/@*)','INT')
    /*output:
    */

    更多可参见:http://www.cnblogs.com/FlyingPig-Nannan/articles/1968917.html


    当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
    本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/archive/2012/06/03/2532454.html


  • 相关阅读:
    JDBC批量删除某一用户下的触发器
    DWZ框架修改默认主页(转)
    JSP页面中的js方法遍历后台传来的自定义对象的List
    JDBC获取表注释
    你的显示方式安全么?JSTL中c:out标签介绍
    tomcat启动报错
    PPP协议体系的实现
    Linux下的虚拟Bridge实现
    三皇五帝
    贴近原理层的科技发展
  • 原文地址:https://www.cnblogs.com/buguge/p/2532454.html
Copyright © 2011-2022 走看看