在 SQLServer2005 中对 XML 的处理功能显然增强了很多,提供了 query(),value(),exist(),modify(),nodes() 等函数。关于 xml ,难以理解的不是 SQLServer 提供的函数,而是对 xml 本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探一下而已。
详见 SQLServer 联机帮助:
主题
 说明
 
query() 方法( xml 数据类型)
 此方法用于对 XML 实例进行查询。
 
value() 方法( xml 数据类型)
 此方法用于从 XML 实例检索 SQL 类型的值。
 
exist() 方法( xml 数据类型)
 此方法用于确定查询是否返回非空结果。
 
modify() 方法( xml 数据类型)
 此方法用于指定 XML DML 语句以执行更新。
 
nodes() 方法( xml 数据类型)
 此方法用于将 XML 拆分成多行以将 XML 文档的组成部分传播到行集中。 
 
闲话少说,首先创建一个包含 xml 类型的数据表,其次创建一个 xml 文件,在服务端把 xml 文件内容加载该数据表中。
CREATE TABLE VisioXML
(
ID  INT,
Doc XML
);
GO
创建一个名为 xxx.xml 的文件,内容如下
/*
<ROOT>
<ROW>
<ID>1</ID>
<NAME SEX="MALE">WBQ</NAME>
</ROW>
<ROW>
<ID>2</ID>
<NAME SEX="FEMALE">CZH</NAME>
</ROW>
</ROOT>
*/
INSERT INTO VisioXML(ID,Doc)
SELECT 4,* FROM OPENROWSET(BULK 'e:\xxx.xml',SINGLE_BLOB) AS x;
 
-- 以下为 value() 和 query() 的用法
--SELECT * FROM VisioXML WHERE ID=4
SELECT
Doc.value('(/ROOT/ROW[1]/ID/text())[1]','int') RootRowID1,  -- 第一行 ID 的值,并且转换为 int 类型
Doc.value('(/ROOT/ROW[2]/ID/text())[1]','int') RootRowID2,  -- 第二行 ID 的值,并且转换为 int 类型
Doc.value('(/ROOT/ROW[1]/NAME/text())[1]','varchar(20)') RootRowNAME1,  -- 第一行 NAME 的值,并且转换为 VARCHAR 类型
Doc.value('(/ROOT/ROW[1]/NAME/@SEX)[1]','varchar(20)') RootRowNAME1SEX, -- 第一行 NAME 中 SEX 属性的值,并且转换为 VARCHAR 类型
Doc.query('/ROOT') Root,              --ROOT 下的所有 XML 内容,类型为 XML
Doc.query('/ROOT/ROW[1]') RootRow1,  --ROOT 下第一行所有的 XML 内容,类型为 XML
Doc.query('/ROOT/ROW[2]') RootRow2   --ROOT 下第二行所有的 XML 内容,类型为 XML
FROM VisioXML
WHERE ID=4
 
-- 以下为 exist() 函数在两种环境下的用法
SELECT
Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = xs:string("MALE")]') Row1EQStringMale,
Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = "MALE"]') Row1EQMale,
Doc.exist('/ROOT/ROW[1]/ID[(text()[1] cast as xs:float?) = xs:float(1)]') Row1EQfloat1,
Doc.exist('/ROOT/ROW[2]/ID[(text()[1] cast as xs:float?) = 2]') Row1EQ1
FROM VisioXML
WHERE ID=4
SELECT ID,Doc
FROM VisioXML
WHERE ID=4
AND Doc.exist('/ROOT/ROW[1]/NAME[(@SEX)]')=1      -- 第一行 NAME 中存在 SEX 属性
--AND Doc.exist('/ROOT/ROW[1]/NAME[not(@SEX)]')=1 -- 第一行 NAME 中不存在 SEX 属性
--AND Doc.exist('/ROOT/ROW[1][not(ID/*)]')=1      -- 第一行不存在 ID 字段
--AND Doc.exist('/ROOT/ROW[1][(ID/*)]')=1         -- 第一行存在 ID 字段
 
 

转载于:https://blog.51cto.com/baoqiangwang/310450

关于SQLServer2005的学习笔记——XML的处理相关推荐

  1. C#学习笔记-XML的读写(一)

    需要解析的配置XML <?xml version="1.0" encoding="utf-8" ?> <configurations> ...

  2. 关于SQLServer2005的学习笔记——SQL查询解析步骤

    最近一来因工作上的事情比较闹心,没心事再研究 SQLServer2005 的体系结构:一来关于体系结构确实过于复杂,远远不如应用来的直接明了,所以暂时搁笔. 出于工作上的需要,对应用开发需要更多的了解 ...

  3. 关于SQLServer2005的学习笔记——生日问题

    生日问题是个看似简单逻辑上却又比较复杂的小问题 主要的逻辑难点第一个是关于闰月尾天的计算,第二个是判断本年度生日是否已过 本文给出了三种解决办法, 第一种是最常用的解决办法,即常用的 SQL 语法,不 ...

  4. w3schools文档学习笔记 - XML

    http://www.w3school.com.cn/xml/xml_syntax.asp 在 XML 中,省略关闭标签是非法的.所有元素都必须有关闭标签 声明不属于XML本身的组成部分.它不是 XM ...

  5. 关于SQLServer2005的学习笔记——约束、Check、触发器的执行顺序

    通常我们认为一条 Insert 就是一个事务,但这个事务是如何执行的呢?如果保障事务执行时该事务的完整性和一致性呢?抛开存储机制.索引.锁等环节,让我们看看约束. Check 和触发器在这个过程中的先 ...

  6. JavaWeb学习笔记——XML简介

  7. 关于SQLServer2005的学习笔记——CTE递归和模拟测试数据

    在 Oracle 中模拟测试 数据是非常简单的一件事情. Oracle 首先提供了一个 dual 的虚表 其次提供了一个 Connect by 语句,实现了虚表数据列的模拟 最后 Oracle 提供了 ...

  8. XML学习笔记(二)-- DTD格式规范

    标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...

  9. Java学习笔记整理-知识梳理+JDK1.8详细文档

    链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...

最新文章

  1. Codepen 每日精选(2018-3-30)
  2. 【Flink】Flink 1.12 AbstractRichFunction 源码
  3. Python——类与对象的学习笔记
  4. AJAX,JSON,GSON
  5. python垃圾回收机制与很多_你了解Python的 垃圾回收 机制吗?
  6. turn.js (翻页效果)总结
  7. postgres 坐标_用postgreSQL做基于地理位置的app(zz)
  8. 同城信息发布小程序开发制作
  9. 全国计算机等级考试二级教程与资料
  10. 亚商投资顾问 早餐FM/1116全球6G发展大会开幕
  11. U盘装系统启动时按F12没有反应的原因之一
  12. Ubuntu 14.04 LTS 安装配置搜狗拼音输入法
  13. java毕业设计——基于java+Spring+JSP的宠物网站设计与实现(毕业论文+程序源码)——宠物网站
  14. 编程萌新必看!初学C语言必会的知识点,你学废了吗?
  15. nas系统存储服务器,我的瞎折腾NAS之系统选择篇
  16. 研究黑苹果系统——拯救者Y7000P-10875H
  17. 500 – 内部服务器错误。 您查找的资源存在问题,因而无法显示。
  18. Http Header里的Content-Type
  19. QQ空间小秘书 V1.30 贺岁最新版~~ 天空原创软件
  20. Citrix 知识中心Top10 - 2012年9月 包括KB、白皮书、补丁、演讲以及工具。

热门文章

  1. Ubantu安装maven
  2. 【Oracle Database】数据库用户管理
  3. 小巧的日志记录组件 - 开源研究系列文章
  4. 使用vim打造自己的python编辑器
  5. 开源可视化日志分析软件-Gource
  6. How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)
  7. Your Podfile has had smart quotes sanitised
  8. 一个经典例子让你彻彻底底理解java回调机制
  9. 利用yum 安装 lamp环境搭载 cacti监控和memcached数据库
  10. RabbitMQ入门(4)--路由