最近在做xml的数据迁移工作,需要将符合旧版本xsd的xml字段迁移到新版本上,因此期间查阅了很多相关资料。目前迁移工作已完成,综合所有资料和自己的实际应用,将“SQL Server 2005XML操作”总结为八篇文章,一方面作为自己以后查阅的依据,另一方面也希望对大家有所帮助,其中有借鉴自网络的部分,也有自己总结的部分,总结的比较仓促,难免有疏漏之处,欢迎大家批评指正!
1、xml: 能认识元素、属性和值
2、xpath: 寻址语言【类似windows目录的查找】
语法格式,这些语法可以组合为条件:
"."表示自己,".."表示父亲,"/"表示儿子,"//"表示后代,
"name"表示按名字查找,"@name"表示按属性查找
"集合[条件]" 表示根据条件取集合的子集,条件可以是:
数 值:数字,last(),last()-数字 等
布尔值:position()<数字,@name='条件',name='条件'
【条件是布尔值的时候可以合并计算:and or】
3、xquery: 基于xpath标的准查询语言,sqlserver xquery包含如下函数:
exist(xpath条件):返回布尔值表示节点是否存在
query(xpath条件):返回由符合条件的节点组成的新的xml文档
value(xpath条件,数据类型):返回指定的标量值,xpath条件结果必须唯一
nodes(xpath条件): 返回由符合条件的节点组成的一行一列的结果表,将 xml 数据类型实例拆分为关系数据,则 nodes() 方法非常有用。它允许您标识将映射到新行的节点。
(以上摘自http://blog.csdn.net/jinjazz)
[注意]
本系列中xml示例为不含命名空间的xml形式,若含有命名空间则需要在最前面加上"declare namespace [命名空间缩写]=[命名空间URL]"的字样,
同时涉及到的节点需要加入命名空间缩写。
例如:
set @data.modify('insert <author>Erik E. Ray</author>
before (/bookstore/book[@category="WEB"]/author)[1]')
--需要改为
set @data.modify(' declare namespace UI=http://schemas.com/sqlserver/BookStore ;
insert <UI:author>Erik E. Ray</UI:author> before (/UI: bookstore/UI:book[@category="WEB"]/UI:author)[1]'