1. 1.xml.exist
  2. 输入为XQuery表达式,返回01或是Null0表示不存在,1表示存在,Null表示输入为空
  3. 2.xml.value
  4. 输入为XQuery表达式,返回一个SQL Server标量值
  5. 3.xml.query
  6. 输入为XQuery表达式,返回一个SQL Server XML类型流
  7. 4.xml.nodes
  8. 输入为XQuery表达式,返回一个XML格式文档的一列行集
  9. 5.xml.modify
  10. 使用XQuery表达式对XML的节点进行insert , update delete 操作。

  1. 下面通过例子对上面的五种操作进行说明:
  2. declare @XMLVar xml = '
  3. <catalog>
  4. <book category="ITPro">
  5. <title>Windows Step By Step</title>
  6. <author>Bill Zack</author>
  7. <price>49.99</price>
  8. </book>
  9. <book category="Developer">
  10. <title>Developing ADO .NET</title>
  11. <author>Andrew Brust</author>
  12. <price>39.93</price>
  13. </book>
  14. <book category="ITPro">
  15. <title>Windows Cluster Server</title>
  16. <author>Stephen Forte</author>
  17. <price>59.99</price>
  18. </book>
  19. </catalog>'
  20.  
  21. 1. xml.exist
  22. select @XMLVar.exist('/catalog/book')-----返回1
  23. select @XMLVar.exist('/catalog/book/@category')-----返回1
  24. select @XMLVar.exist('/catalog/book1')-----返回0
  25. set @XMLVar = null
  26. select @XMLVar.exist('/catalog/book')-----返回null
  27.  
  28. 2.xml.value
  29. select @XMLVar.value('/catalog[1]/book[1]','varchar(MAX)')
  30. select @XMLVar.value('/catalog[1]/book[2]/@category','varchar(MAX)')
  31. select @XMLVar.value('/catalog[2]/book[1]','varchar(MAX)')
  32. 结果集为:
  33. Windows Step By StepBill Zack49.99 Developer NULL
  34.  
  35. 3.xml.query
  36. select @XMLVar.query('/catalog[1]/book')
  37. select @XMLVar.query('/catalog[1]/book[1]')
  38. select @XMLVar.query('/catalog[1]/book[2]/author')
  39. 结果集分别为:
  40. <book category="ITPro">
  41. <title>Windows Step By Step</title>
  42. <author>Bill Zack</author>
  43. <price>49.99</price>
  44. </book>
  45. <book category="Developer">
  46. <title>Developing ADO .NET</title>
  47. <author>Andrew Brust</author>
  48. <price>39.93</price>
  49. </book>
  50. <book category="ITPro">
  51. <title>Windows Cluster Server</title>
  52. <author>Stephen Forte</author>
  53. <price>59.99</price>
  54. </book>
  55. <book category="ITPro">
  56. <title>Windows Step By Step</title>
  57. <author>Bill Zack</author>
  58. <price>49.99</price>
  59. </book>
  60. <author>Andrew Brust</author>
  61.  
  62. 4.xml.nodes
  63. select T.c.query('.') as result from @XMLVar.nodes('/catalog/book') as T(c)
  64. select T.c.query('title') as result from @XMLVar.nodes('/catalog/book') as T(c)
  65. 结果集分别为:
  66. <book category="ITPro"><title>Windows Step By Step</title><author>Bill …………
  67. <book category="Developer"><title>Developing ADO .NET</title><author>Andrew …………
  68. <book category="ITPro"><title>Windows Cluster Server</title><author>Stephen …………
  69. <title>Windows Step By Step</title>
  70. <title>Developing ADO .NET</title>
  71. <title>Windows Cluster Server</title>
  72.  
  73. 5.xml.modify
  74. SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insertupdatedelete
  75. SQL Server中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插入,删除和修改操作。
  76. 本文以下面XML为例,对三种DML进行说明:
  77. declare @XMLVar xml = '
  78. <catalog>
  79. <book category="ITPro">
  80. <title>Windows Step By Step</title>
  81. <author>Bill Zack</author>
  82. <price>49.99</price>
  83. </book>
  84. <book category="Developer">
  85. <title>Developing ADO .NET</title>
  86. <author>Andrew Brust</author>
  87. <price>39.93</price>
  88. </book>
  89. <book category="ITPro">
  90. <title>Windows Cluster Server</title>
  91. <author>Stephen Forte</author>
  92. <price>59.99</price>
  93. </book>
  94. </catalog>
  95. '
  96.  
  97. 1.XML.Modify(Insert)语句介绍
  98. A.利用as first,at last,before,after四个参数将元素插入指定的位置
  99. set @XMLVar.modify('insert <first name="at first" /> as first into (/catalog[1]/book[1])')
  100. set @XMLVar.modify('insert <last name="at last"/> as last into (/catalog[1]/book[1])')
  101. set @XMLVar.modify('insert <before name="before"/> before (/catalog[1]/book[1]/author[1])')
  102. set @XMLVar.modify('insert <after name="after"/> after (/catalog[1]/book[1]/author[1])')
  103. SELECT @XMLVar.query('/catalog[1]/book[1]');
  104. 结果集为:
  105. 1: <book category="ITPro">
  106. 2: <first name="at first" />
  107. 3: <title>Windows Step By Step</title>
  108. 4: <before name="before" />
  109. 5: <author>Bill Zack</author>
  110. 6: <after name="after" />
  111. 7: <price>49.99</price>
  112. 8: <last name="at last" />
  113. 9: </book>
  114.  
  115. B.将多个元素插入文档中
  116. --方法一:利用变量进行插入
  117. DECLARE @newFeatures xml;
  118. SET @newFeatures = N';
  119. <first>one element</first>
  120. <second>second element</second>'
  121. SET @XMLVar.modify(' )
  122. insert sql:variable("@newFeatures")
  123. into (/catalog[1]/book[1])'
  124. --方法二:直接插入
  125. set @XMLVar.modify(')
  126. insert (<first>one element</first>,<second>second element</second>)
  127. into (/catalog[1]/book[1]/author[1])'
  128. SELECT @XMLVar.query('/catalog[1]/book[1]');
  129.  
  130. 结果集为:
  131.  
  132. 1: <book category="ITPro">
  133. 2: <title>Windows Step By Step</title>
  134. 3: <author>Bill Zack
  135. 4: <first>one element</first>
  136. 5: <second>second element</second>
  137. 6: </author>
  138. 7: <price>49.99</price>
  139. 8: <first>one element</first>
  140. 9: <second>second element</second>
  141. 10: </book>
  142.  
  143. C.将属性插入文档中
  144. --使用变量插入
  145. declare @var nvarchar(10) = '变量插入'
  146. set @XMLVar.modify(
  147. 'insert (attribute var {sql:variable("@var")}))
  148. into (/catalog[1]/book[1])'
  149. --直接插入
  150. set @XMLVar.modify(
  151. 'insert (attribute name {"直接插入"}))
  152. into (/catalog[1]/book[1]/title[1])'
  153. --多值插入
  154. set @XMLVar.modify(
  155. 'insert (attribute Id {"多值插入1"},attribute name {"多值插入2"}) )
  156. into (/catalog[1]/book[1]/author[1])'
  157. SELECT @XMLVar.query('/catalog[1]/book[1]');
  158.  
  159. 结果集为:
  160. 1: <book category="ITPro" var="变量插入">
  161. 2: <title name="直接插入">Windows Step By Step</title>
  162. 3: <author Id="多值插入1" name="多值插入2">Bill Zack</author>
  163. 4: <price>49.99</price>
  164. 5: </book>
  165.  
  166. D.插入文本节点
  167. set @XMLVar.modify(
  168. 'insert text{"at first"} as first)
  169. into (/catalog[1]/book[1])'
  170. SELECT @XMLVar.query('/catalog[1]/book[1]');
  171.  
  172. 结果集为:
  173. 1: <book category="ITPro">
  174. 2: at first
  175. 3: <title>Windows Step By Step</title>
  176. 4: <author>Bill Zack</author>
  177. 5: <price>49.99</price>
  178. 6: </book>
  179.  
  180. 注意:插入本文同样具体 as firstas lastbeforeafter四种选项,可以参考A中的使用方法
  181.  
  182. E.插入注释节点
  183. set @XMLVar.modify(
  184. 'insert <!--插入评论-->)
  185. before (/catalog[1]/book[1]/title[1])'
  186. SELECT @XMLVar.query('/catalog[1]/book[1]');
  187.  
  188. 结果集为:
  189. 1: <book category="ITPro">
  190. 2: <!--插入评论-->
  191. 3: <title>Windows Step By Step</title>
  192. 4: <author>Bill Zack</author>
  193. 5: <price>49.99</price>
  194. 6: </book>
  195. 注意插入注释节点同样具体 as firstas lastbeforeafter四种选项,可以参考A中的使用方法
  196.  
  197. F.插入处理指令
  198. set @XMLVar.modify(
  199. 'insert <?Program "Instructions.exe" ?>)
  200. before (/catalog[1]/book[1]/title[1])'
  201. SELECT @XMLVar.query('/catalog[1]/book[1]');
  202. 结果集为:
  203. 1: <book category="ITPro">
  204. 2: <?Program "Instructions.exe" ?>
  205. 3: <title>Windows Step By Step</title>
  206. 4: <author>Bill Zack</author>
  207. 5: <price>49.99</price>
  208. 6: </book>
  209. 注意插入处理指令同样具体 as firstas lastbeforeafter四种选项,可以参考A中的使用方法
  210.  
  211. G.根据 if 条件语句进行插入
  212. set @XMLVar.modify(
  213. 'insert )
  214. if (/catalog[1]/book[1]/title[2]) then
  215. text{"this is a 1 step"}
  216. else ( text{"this is a 2 step"} )
  217. into (/catalog[1]/book[1]/price[1])'
  218. SELECT @XMLVar.query('/catalog[1]/book[1]');
  219. 结果集为:
  220. 1: <book category="ITPro">
  221. 2: <title>Windows Step By Step</title>
  222. 3: <author>Bill Zack</author>
  223. 4: <price>49.99this is a 2 step</price>
  224. 5: </book>
  225.  
  226. 2.XML.Modify(delete)语句介绍
  227. --删除属性
  228. set @XMLVar.modify('delete /catalog[1]/book[1]/@category')
  229. --删除节点
  230. set @XMLVar.modify('delete /catalog[1]/book[1]/title[1]')
  231. --删除内容
  232. set @XMLVar.modify('delete /catalog[1]/book[1]/author[1]/text()')
  233. --全部删除
  234. set @XMLVar.modify('delete /catalog[1]/book[2]')
  235.  
  236. SELECT @XMLVar.query('/catalog[1]');
  237.  
  238. 结果集为:
  239. 1: <catalog>
  240. 2: <book>
  241. 3: <author />
  242. 4: <price>49.99</price>
  243. 5: </book>
  244. 6: <book category="ITPro">
  245. 7: <title>Windows Cluster Server</title>
  246. 8: <author>Stephen Forte</author>
  247. 9: <price>59.99</price>
  248. 10: </book>
  249. 11: </catalog>
  250.  
  251. 3.XML.Modify(replace)语句介绍
  252. --替换属性
  253. set @XMLVar.modify('replace value of(/catalog[1]/book[1]/@category)) with ("替换属性")'
  254. --替换内容
  255. set @XMLVar.modify('replace value of(/catalog[1]/book[1]/author[1]/text()[1])) with("替换内容")'
  256. --条件替换
  257. set @XMLVar.modify('replace value of (/catalog[1]/book[2]/@category))
  258. with(
  259. if(count(/catalog[1]/book)>4) then
  260. "条件替换1"
  261. else
  262. "条件替换2")'
  263.  
  264. SELECT @XMLVar.query('/catalog[1]');
  265.  
  266. 结果集为:
  267. 1: <catalog>
  268. 2: <book category="替换属性">
  269. 3: <title>Windows Step By Step</title>
  270. 4: <author>替换内容</author>
  271. 5: <price>49.99</price>
  272. 6: </book>
  273. 7: <book category="条件替换2">
  274. 8: <title>Developing ADO .NET</title>
  275. 9: <author>Andrew Brust</author>
  276. 10: <price>39.93</price>
  277. 11: </book>
  278. 12: <book category="ITPro">
  279. 13: <title>Windows Cluster Server</title>
  280. 14: <author>Stephen Forte</author>
  281. 15: <price>59.99</price>
  282. 16: </book>
  283. 17: </catalog>

示例1:从XML中解析数据到表变量

DECLARE @ItemMessage XML 
DECLARE @ItemTable TABLE(ItemNumber INT PRIMARY KEY,ItemDescription NVARCHAR(300))
SET @ItemMessage=N'<ItemList> 
<Item> 
    <ItemNumber>1</ItemNumber> 
    <ItemDescription>XBox 360,超值</ItemDescription> 
</Item> 
<Item> 
    <ItemNumber>2</ItemNumber> 
    <ItemDescription>Windows Phone7,快来尝鲜吧</ItemDescription> 
</Item> 
</ItemList>'
INSERT INTO @ItemTable 

ItemNumber, 
ItemDescription 

SELECT T.c.value('(ItemNumber/text())[1]','INT'), 
T.c.value('(ItemDescription/text())[1]','NVARCHAR(300)') 
FROM @ItemMessage.nodes('/ItemList/Item') AS T(c)
SELECT ItemNumber, 
ItemDescription 
FROM @ItemTable

运行结果:

示例二: 解析带命名空间的XML数据

  1. DECLARE @ItemMessage XML
  2. DECLARE @ItemTable TABLE(ItemNumber INT PRIMARY KEY,ItemDescription NVARCHAR(300))
  3. --包含 XML 命名空间
  4. SET @ItemMessage=N'<ItemList xmlns="http://cd.love.com/SOA">
  5. <Item>
  6. <ItemNumber>1</ItemNumber>
  7. <ItemDescription>XBox 360,超值</ItemDescription>
  8. </Item>
  9. <Item>
  10. <ItemNumber>2</ItemNumber>
  11. <ItemDescription>Windows Phone7,快来尝鲜吧</ItemDescription>
  12. </Item>
  13. </ItemList>'
  14. --设置命名空间
  15. ;WITH XMLNAMESPACES(DEFAULT 'http://cd.love.com/SOA')
  16. INSERT INTO @ItemTable
  17. (
  18. ItemNumber,
  19. ItemDescription
  20. )
  21. SELECT T.c.value('(ItemNumber/text())[1]','INT'),
  22. T.c.value('(ItemDescription/text())[1]','NVARCHAR(300)')
  23. FROM @ItemMessage.nodes('/ItemList/Item') AS T(c)
  24. SELECT ItemNumber,
  25. ItemDescription
  26. FROM @ItemTable

运行结果:


示例三:将 xml tag标签的中值 转为 table 格式

  1. DECLARE @xml xml='<mssql version="10.50.4000" name="Microsoft SQL Server Developer Edition (64-bit)">
  2. <type name="Windows 7 Main Server">
  3. <tag KeyValue="enabled">
  4. <boolean>true</boolean>
  5. </tag>
  6. <tag KeyValue="disabled">
  7. <tag method="Read">
  8. <type name="Windows 8 virtual pc">
  9. <tag KeyValue="uniqueKey">
  10. <string>SQL Server 2008</string>
  11. </tag>
  12. <tag KeyValue="value 8GB">
  13. <string>SQL Server 2000</string>
  14. </tag>
  15. </type>
  16. </tag>
  17. <tag method="Read">
  18. <type name="Windows 8 virtual pc">
  19. <tag KeyValue="primaryKey">
  20. <string>SQL Server 2008 R2 SP1</string>
  21. </tag>
  22. <tag KeyValue="value 8GB">
  23. <string>SQL Server 2005 SP3</string>
  24. </tag>
  25. </type>
  26. </tag>
  27. <tag method="Write">
  28. <type name="Windows Server 2008 virtual pc">
  29. <tag KeyValue="primaryKey">
  30. <string>SQL Server 2008 R2 SP2</string>
  31. </tag>
  32. <tag KeyValue="value 10GB">
  33. <string>SQL Server 2012</string>
  34. </tag>
  35. </type>
  36. </tag>
  37. </tag>
  38. </type>
  39. </mssql>';
  40.  
  41. SELECT b.c.value('@version', 'varchar(100)') [version]
  42. ,b.c.value('@name', 'varchar(200)') [Name]
  43. ,f.c.value('@name', 'varchar(200)') [ServerName]
  44. ,r.c.value('@KeyValue', 'varchar(50)') [KeyValue]
  45. ,r.c.value('(boolean)[1]', 'varchar(25)') [boolean]
  46. ,k.c.value('@method', 'varchar(25)') [method]
  47. ,k.c.value('@name', 'varchar(25)') [virtual_pc]
  48. ,y.c.value('@KeyValue', 'varchar(25)') [KeyValue]
  49. ,y.c.value('(string)[1]', 'varchar(25)') [string]
  50. FROM @xml.nodes('mssql') b(c)
  51. CROSS APPLY b.c.nodes('type') f(c)
  52. CROSS APPLY f.c.nodes('tag') r(c)
  53. CROSS APPLY f.c.nodes('tag/tag') k(c)
  54. CROSS APPLY f.c.nodes('tag/tag/type/tag') y(c);

SQL Server 操作XML数据的更多相关文章

  1. sql server 操作xml例子

    sql server 操作xml例子 /* sql xml 入门: --by jinjazz --http://blog.csdn.net/jinjazz 1.xml: 能认识元素.属性和值 2.xp ...

  2. ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据

    本文演示如何使用2种不同的方法从 SQL Server 生成 XML.   方法1:使用了 SqlCommand 的 ExecuteXmlReader 方法获取 XmlReader,然后使用 Data ...

  3. SQL Server解析XML数据的方法详解

    --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name=&q ...

  4. Sql Server系列:数据表操作

    表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...

  5. SQL Server对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  6. 常见SQL Server导入导出数据的几个工具

    摘自:http://www.cnblogs.com/chenxizhang/archive/2011/06/09/2076542.html 在我们的日常工作中,与数据库打交道的机会越来越多.这一篇文章 ...

  7. T-Sql操作Xml数据(转)

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  8. Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform

    Expression构建DataTable to Entity 映射委托   1 namespace Echofool.Utility.Common { 2 using System; 3 using ...

  9. sql server 与oracle数据互导的一种思路--sql server链接服务器

    思路:通过在sql server数据库中添加链接服务器,可以远程查询oracle数据库的表环境准备,安装sql server数据库,并安装好oracle驱动,在配置好tnsname文件中配置好orac ...

随机推荐

  1. pair work结对编程(张艺 杨伊)

    一.结对编程人员: 张艺(学号后三位:185) 杨伊(学号后三位:151) 二.这是我们工作的样子:(图片) 三.结对编程优缺点:  优点:  1.结对编程时间紧密,在一定程度上可以督促双方学习,提高 ...

  2. 【MOOC EXP】Linux内核分析实验六报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述和进程的创建 知识点梳理: ...

  3. IT行业创新的读后感

    一.什么是创新 创新是以新思维.新发明和新描述为特征的一种概念化过程.它原意有三层含义,第一,更新:第二,创造新的东西:第三,改变.创新是人类特有的认识能力和实践能力,是人类主观能动性的高级表现形式, ...

  4. C程序设计教学小结(选择结构)

    1. 函数使用的三个问题 函数声明语句   void add();   或  int add(int x,int y); 函数调用            add();     c=add(a,b) 函 ...

  5. vCenter 异常关机后无法开启ESXi虚拟机的处理.

    春节假期一个插排掉电了, 然后vcenter不幸自动关机了. 对虚拟机进行开机时错误提示 前期更改过administrator的密码, 但是忘记同步修改sqlserver启动时的用户了(这里使用adm ...

  6. [学习笔记]Ubuntu下安装配置SQLSERVER2017

    摘要自微软官网: https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-ubuntu 安装步骤: 1. 导入公共秘 ...

  7. React 组件

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  8. python 深入浅出装饰器(decorator)--举的例子关于星级争霸2(starcraft2)

    其实早就想写一篇深入浅出装饰器的文章,苦于一直没有找到很好的例子描述,自己除了在写api参数检测和日志打印的时候用到以外,其他地方也没有什么重度使用所以一直没有写. 我不会讲解装饰器的理论,还有各种基 ...

  9. IT行业­——Linux

    现在是21世纪,是科学技术大力发展的一个时代,IT行业已经成为现在的一个非常热门的一个行业,许许多多的人都想要往IT方面发展,找IT方面相关的一个工作.因此,现在也出现了很多IT培训机构,比如培训Li ...

  10. quartz 配置

    <bean id="quartzJob" class="com.wistron.swpc.detaillog.common.SwfitFileAnalysis&qu ...