zoukankan      html  css  js  c++  java
  • sql server 2005 XML查询例子

    原文出处:http://www.cnblogs.com/kean/archive/2010/09/21/1832557.html

    SQL Server 2005 新增的一个特性是对 XML 的支持的增强,好多文章都在鼓吹 XML 是如何如何的有用,但惭愧的是我学习了好几年的数据库,很少在实际应用中触碰过 XML,因为用户很少有这方面的需求。最近用户给了一段类似下面结构的 XML。

    declare @xdoc xml

    set @xdoc = '<conn>
                    <mysql servername="192.168.1.120,3306">
                      <user name="root"  password="" />
                      <user name="dba"   password="" />
                      <user name="user"  password="" />
                    </mysql>

                    <mssql servername="192.168.1.110,1433">
                      <user name="sa"    password="" />
                      <user name="dba"   password="" />
                      <user name="user"  password="" />
                    </mssql>

                    <excel id="1" path="c:\database\" filename="source1.xls" />
                    <excel id="2" path="d:\database\" filename="source2.xls" />
                    <excel id="3" path="e:\database\" filename="source3.xls" />
                 </conn>
                '
    具体的要求就是:在 SQL 2005 中编写一个查询,取出 excel id=1 时的 path & filename。这个需求提醒了我,XML 在数据库中的一个常用需求就是取出 XML 节点中参数的值。

    1. SQL 2005 XML 取出节点数据方法一。
    select excel_path = t.c.value('@path'     ,'varchar(255)')
          ,excel_name = t.c.value('@filename' ,'varchar(255)')
      from @xdoc.nodes('/conn/excel') t (c)
    where t.c.value('@id', 'int') = 1

    结果:
    excel_path       excel_name
    ---------------- -----------
    c:\database\     source1.xls


    2. SQL 2005 XML 取出节点数据方法二。
    select  excel_path = @xdoc.value('(/conn/excel[@id="1"]/@path)[1]', 'varchar(255)')
           ,excel_name = @xdoc.value('(/conn/excel[@id="1"]/@filename)[1]', 'varchar(255)')

    结果:
    excel_path       excel_name
    ---------------- -----------
    c:\database\     source1.xls


    3. SQL 2005 XML 取出节点数据方法三。
    该方法是方法二的改进,我们可以在 xml.value() 函数中使用 sql:variable() 来为 XML 节点中的 id 提供一个动态的参数。

    declare @excel_id int
    set @excel_id = 1
     select excel_path = @xdoc.value('(/conn/excel[@id=sql:variable("@excel_id")]/@path)[1]', 'varchar(255)') 
    ,excel_name = @xdoc.value('(/conn/excel[@id=sql:variable("@excel_id")]/@filename)[1]', 'varchar(255)')
    结果:
    excel_path     excel_name
    ----------- ----- -----------
    c:\database\   source1.xls 
  • 相关阅读:
    asp.net中利用session对象传递、共享数据[session用法]
    敏捷软件开发要点【转载】
    简化 Django
    由浅入深探究mysql索引结构原理、性能分析与优化
    Instagram的技术架构
    nosql数据库选型
    以Facebook为案例剖析科技公司应有的工具文化
    Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
    spark0.9分布式安装
    前端开发框架选型清单
  • 原文地址:https://www.cnblogs.com/yuananyun/p/1908051.html
Copyright © 2011-2022 走看看