本文转载:http://www.cnblogs.com/Ricky81317/archive/2010/01/06/1640434.html

最近这段时间在Sql Server 2005下做了很多根据复杂XML文档导入数据表,以及根据数据表生成复杂XML文档的事情(并非 For XML Auto了事),所有的操作都是利用Sql语句,发现Sql Server 2005的XML文档处理能力真的已经很强了,自己也终于开始体会到Sql Server 2005真正的实力了。在这里记录一下这种情况的处理:

有以下一个XML文档:

<basevendors>
    <basevendor name="Northeast" taxid="99999" description="Re/Max Northeast" activevendor="Y" apvendornumber="8888">
        <basevendorcontactinfo>
            <basevendoraddress addressline1="2940 Oak St." City="Kingwood" statecode="TX" zip="77339" country="USA" effectivedate="11/11/2001" />
            <basevendoraddress addressline1="1849 Kingwood Dr." City="Kingwood" statecode="TX" zip="0" country="USA" />
        </basevendorcontactinfo>
    </basevendor>
    <basevendor name="Better Homes &amp; Gardens Rand Realty" taxid="321456" description="Better Homes &amp; Gardens Rand Realty" activevendor="Y" apvendornumber="87542">
        <basevendorcontactinfo>
            <basevendoraddress addressline1="10 Schriever Lane" City="New City" statecode="NY" zip="10956" country="USA" effectivedate="11/22/1899" />
        </basevendorcontactinfo>
    </basevendor>
    <basevendor name="Bodell-Van Drimmelen" taxid="9856587" description="Bodell-Van Drimmelen" activevendor="N" apvendornumber="22545">
        <basevendorcontactinfo>
            <basevendoraddress addressline1="Residential Appraisers, Inc." City="Salt Lake City" statecode="UT" zip="84106" country="USA" effectivedate="04/29/2003"/>
            <basevendoraddress addressline1="Residential Appraisers, Inc." City="Salt Lake City" statecode="UT" zip="0" country="USA" effectivedate="04/11/2003" />
        </basevendorcontactinfo>
    </basevendor>
    <basevendor name="Rental Relocation Inc." taxid="6589654" description="Rental Relocation Inc." activevendor="Y" apvendornumber="778855" />
</basevendors>

其中包含主子表关系,主表是basevendor节点的信息,包括name, taxid等内容,子表信息包含在每个basevendor节点下的basevendoraddress节点的属性中,包括addressline1, city等信息。

现在假设有这样一个数据表:

CREATE TABLE BaseVendorAndAddress
(
    BaseVendorName VARCHAR(50)
    , BaseVendorTaxId VARCHAR(20)
    , AddressLine VARCHAR(100)
    , City VARCHAR(20)
)

其中前2个字段来自于主表,而后面2个字段来自于子表

如何操作呢?Sql Server 2005太强大了(各位高手请勿蔑视小生这种“没见过世面”的夸张),以下是处理方法:

DECLARE @XML XML
SET @XML= '
<basevendors>
    ... 上面那段XML文档 ...
</basevendors>' SELECT Vendor.value('@name[1]','varchar(50)') AS VendorName, Vendor.value('@taxid[1]','varchar(50)') AS TaxID
    , addr.value('@addressline1[1]','varchar(200)') AS AddressLine, addr.value('@City[1]','varchar(10)') AS City
FROM @XML.nodes('basevendors/basevendor') BV(Vendor)
CROSS APPLY BV.Vendor.nodes('basevendorcontactinfo/basevendoraddress') addrs(addr)

利用Sql Server 2005处理XML类型的能力和Apply操作,寥寥几句就解决了。

最新文章

  1. error LNK2019 无法解析的外部符号 __imp__accept@12
  2. java jps 命令详解
  3. 整合Servlet到Spring容器
  4. mysql中DATETIME,DATE和TIMESTAMP的区别整理
  5. 动态规划(计数DP):JLOI 2016 成绩比较
  6. 织梦dede自定义内容分页,datalist运用实例
  7. Delphi XE2 升级项目编译ralease版本,无法添加UAC解决方法
  8. Spring Aspect 用法略讲
  9. 用jQuery写的最简单的表单验证
  10. Java学习笔记——设计模式之一.简单工厂
  11. LVS集群之原理及概述(1)
  12. JavaScrip 排序算法
  13. 让Myeclipse自动生成的get set方法 自动加上文本注释,并且注释内容包含字段中我们加的文档注释
  14. 小白的首个maven web项目Step1软件安装一(jdk的下载配置和eclipse的安装)
  15. 【刷题】BZOJ 1413 [ZJOI2009]取石子游戏
  16. Dapper总结(一)---基本CRUD操作
  17. 外键 Foreign keys
  18. Leetcode 145
  19. Python 字符串(count)
  20. Java使用Redis学习笔记

热门文章

  1. centos下配置多个tomcat同时运行
  2. muduo网络库学习笔记(10):定时器的实现
  3. MySQL简单优化
  4. windows“画图”工具用法
  5. Android Learning:多线程与异步消息处理机制
  6. 推荐用于格式化以及高亮显示SQL文的PHP类-SqlFormatter
  7. 【关于JavaScript】常见表单用户名、密码不能为空
  8. 十六进制字符串转化为byte数组
  9. bzoj 3632: 外太空旅行 最大团
  10. JQuery的二维码插件