在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表
本文转载: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 & Gardens Rand Realty" taxid="321456" description="Better Homes & 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操作,寥寥几句就解决了。
在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表的更多相关文章
- SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串
在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...
- 转载--SQL Server 2005的XQuery介绍
原文地址: http://bbs.51cto.com/thread-458009-1-1.html 引用: 摘要 本文介绍了SQL Server 2005能够支持的XQuery的各方面特性如FLW ...
- 安装SQL Server 2005
在安装SQL Server 2005时,经常会遇到一些错误,从而使系统无法正常安装.下面讲解在安装过程中经常出现的一些错误及其解决的方法.1.解决在安装SQL Server 2005时安装程序被挂起的 ...
- SQL SERVER 2000 & SQL SERVER 2005 数据缓存依赖
一.SQL SERVER 7.0/2000和SQL SERVER 2005的简介及比较 1.1 SQL SERVER 7.0/2000 SQL SERVER 7.0/2000没有提供内置的支持 ...
- 安装 SQL Server 2005 的硬件和软件要求(官方全面)
SQL Server 2005 安装要求 本主题介绍了安装 SQL Server 205 的硬件和软件要求,以及查看安装文档的说明. 硬件和软件要求(32 位和 64 位) 访问 SQL Server ...
- SQL Server 2005中的分区表(六):将已分区表转换成普通表(转)
我的俄罗斯名叫作“不折腾不舒服斯基”,所以,不将分区表好好折腾一下,我就是不舒服. 在前面,我们介绍过怎么样直接创建一个分区表,也介绍过怎么将一个普通表转换成一个分区表.那么,这两种方式创建的表有什么 ...
- 删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,
原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100 ...
- SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id"
案例环境: 数据库版本: Microsoft SQL Server 2005 (Microsoft SQL Server 2005 - 9.00.5000.00 (X64) ) 案例介绍: 对一个数据 ...
- SQL SERVER 2005/2008 中关于架构的理解(二)
本文上接SQL SERVER 2005/2008 中关于架构的理解(一) 架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...
随机推荐
- Ubuntu 之旅 —— 解决sudo: source: command not found错误
$ sudo -s # source /etc/profile
- 网站访问架构cdn与负载均衡
曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需 要从无数个角度去考虑他,大到服务器的布局,小到软件中某个 ...
- jQuery 标签淡入淡出 个人随笔
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vertical-align的深入学习
W3C官方对vertical-align属性的定义有4个方面: (1)vertical-align属性用于定义“周围的文字.inline元素以及inline-block元素”相对于该元素基线的垂 ...
- 【python】只执行普通除法:添加 from __future__ import division
from __future__ import division 注意future前后是两个下划线
- SQL语句の循环添加数据
declare @i intset @i=1while @i<=1000begininsert into News_ITM(title,msg,subDateTime,author,imageP ...
- list.h
#ifndef LISTHHHHHHH #define LISTHHHHHHH #include "common.h" /* stolen from kernel */ typed ...
- bzoj 2115: [Wc2011] Xor xor高斯消元
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 797 Solved: 375[Submit][Status] ...
- 解决maven打jar包报错 source 1.3 中不支持
问题:maven在进行打包时,报 '请使用-source 5 或者更高版本以启用XX'的信息并导致打包失败. 原因:maven默认的编译插件的java版本较低,导致其不支持例如泛型,注解等用法. 解决 ...
- Cow Marathon
poj1985:http://poj.org/problem?id=1985 题意:就是树的直径. 题解:直接DFS即可. #include<iostream> #include<c ...