SQL Server 2005 新增一特性的描述


  本文标签:SQL Server 2005

  以下的文章主要向大家讲述的是SQL Server 2005 新增的一个特性及,对 XML 的支持的增强,我看到过很多的文章都在鼓吹 XML 的功能是如何的神奇,但是惭愧的是我学习了好几年的数据库,很少在实际应用中触碰过 XML  。

  因为用户很少有这方面的需求  。最近用户给了一段类似下面结构的 XML  。

  

  1. declare @xdoc xml  
  2. set @xdoc = <conn> 
  3. <mysql servername="192.168.1.120,3306"> 
  4. <user name="root" password="" /> 
  5. <user name="dba" password="" /> 
  6. <user name="user" password="" /> 
  7. mysql> 
  8. <mssql servername="192.168.1.110,1433"> 
  9. <user name="sa" password="" /> 
  10. <user name="dba" password="" /> 
  11. <user name="user" password="" /> 
  12. mssql> 
  13. <excel id="1" path="c:\database\" filename="source1.xls" /> 
  14. <excel id="2" path="d:\database\" filename="source2.xls" /> 
  15. <excel id="3" path="e:\database\" filename="source3.xls" /> 
  16. conn> 
  17.  

  具体的要求就是:在 SQL 2005 中编写一个查询,取出 excel id=1 时的 path & filename  。这个需求提醒了我,XML 在数据库中的一个常用需求就是取出 XML 节点中参数的值  。

  1. SQL 2005 XML 取出节点数据方法一  。

  1. select excel_path = t.c.value(@path ,varchar(255))  
  2. ,excel_name = t.c.value(@filename ,varchar(255))  
  3. from @xdoc.nodes(/conn/excel) t (c)  
  4. where t.c.value(@id, int) = 1  
  5. excel_path excel_name  
  6. c:\database\ source1.xls  

  2. SQL 2005 XML 取出节点数据方法二  。

  1. select excel_path = @xdoc.value((/conn/excel[@id="1"]/@path)[1], varchar(255))  
  2. ,excel_name = @xdoc.value((/conn/excel[@id="1"]/@filename)[1], varchar(255))  
  3. excel_path excel_name  
  4. c:\database\ source1.xls 

  3. SQL 2005 XML 取出节点数据方法三  。

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

  

  1. declare @excel_id int  
  2. set @excel_id = 1 
  3. select excel_path = @xdoc.value((/conn/excel[@id=sql:variable("@excel_id")]/@path)[1], varchar(255))  
  4. ,excel_name = @xdoc.value((/conn/excel[@id=sql:variable("@excel_id")]/@filename)[1], varchar(255))  
  5. excel_path excel_name  
  6. c:\database\ source1.xls   

  上述的相关内容就是对SQL Server 2005 新增的一个特性是对 XML 的支持的增强的描述,希望会给你带来一些帮助在此方面  。