sqlserver中对xml进行操作

  1 --1、创建xml测试数据库表Xml_Table
  2 use Fly_Test --测试数据库
  3 go
  4
  5 create table Xml_Table(ID  INT identity PRIMARY KEY, XmlData  XML);
  6 --2、插入测试数据
  7 insert into Xml_Table(XmlData) values
  8 (‘<book id="0001">
  9 <title>SqlServer2005</title>
 10 <author>Fly</author>
 11 <price>21</price>
 12 </book>
 13 ‘);
 14 insert into Xml_Table(XmlData) values
 15 (‘<book id="0002">
 16 <title>SqlServer2008</title>
 17 <author>Fly</author>
 18 <price>22</price>
 19 </book>
 20 ‘);
 21 insert into Xml_Table(XmlData) values
 22 (‘<book id="0003">
 23 <title>SqlServer2012</title>
 24 <author>Fly</author>
 25 <price>23</price>
 26 </book>
 27 ‘);
 28 --3、查询
 29 select * from Xml_Table;
 30 --4、对XML操作真正开始了
 31 --SQLServer2005 中对 XML 的处理功能显然增强了很多,提供了 query(),value(),exist(),modify(),nodes()
 32 --查询所有书的名称及作者
 33 select XmlData.query(‘/book‘) as Title,XmlData.query(‘/book/author‘) as Author from Xml_Table;
 34 --显然这不是我们想要的数据
 35 select XmlData.value(‘(/book/title)[1]‘,‘nvarchar(max)‘) as Title,
 36     XmlData.value(‘(/book/author)[1]‘,‘nvarchar(max)‘) as Author from Xml_Table;
 37 --查询数目编号为0001的书的信息
 38 select  XmlData.value(‘(/book/title)[1]‘,‘nvarchar(max)‘) as Title,
 39     XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) as BookID from Xml_Table
 40     where XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) = ‘0001‘;
 41 --修改数目编号为0001 的价格为 11
 42 update Xml_Table
 43     set XmlData.modify(‘replace value of (/book[@id="0001"]/price/text())[1] with "11"‘);
 44 --修改 所有的数目作者为Fly_12300
 45 update Xml_Table
 46     set XmlData.modify(‘replace value of (/book/author/text())[1] with "Fly_12300"‘)
 47 --查看是否编号为0001的价格修改为11,且所有作者修改为Fly_12300
 48 select  XmlData.value(‘(/book/price)[1]‘,‘nvarchar(max)‘) as Title,
 49     XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) as BookID,
 50     XmlData.value(‘(/book/author)[1]‘,‘nvarchar(max)‘) as Author from Xml_Table
 51     where XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) = ‘0001‘;
 52 --添加属性
 53 update Xml_Table
 54 set XmlData.modify(‘insert attribute isbn {"12300321"} into (/book)[1]‘);
 55 --查看是否存在属性isbn
 56 select  XmlData.value(‘(/book/@isbn)[1]‘,‘nvarchar(max)‘) as isbn,
 57     XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) as BookID from Xml_Table
 58     where XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) = ‘0001‘;
 59 --在编号为0001的添加子节点 category  为 Computer 的分类
 60 update Xml_Table
 61     set XmlData.modify(‘insert <category>Computer</category> before (/book[@id=0001]/author)[1]‘);
 62 --查看是否添加了category节点
 63 select  XmlData.value(‘(/book/category)[1]‘,‘nvarchar(max)‘) as category,
 64     XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) as BookID,XmlData from Xml_Table
 65     where XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) = ‘0001‘;
 66 --删除节点
 67 update Xml_Table
 68     set XmlData.modify(‘delete /book[@id=0001]/category‘);
 69 --查看是否删除了category节点
 70 select  XmlData.value(‘(/book/category)[1]‘,‘nvarchar(max)‘) as category,
 71     XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) as BookID,XmlData from Xml_Table
 72     where XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) = ‘0001‘;
 73 --nodes()  查询 book的编码
 74 select ids.value(‘@id‘, ‘varchar(max)‘),ids.value(‘(title)[1]‘,‘nvarchar(max)‘) title from  Xml_Table
 75     CROSS APPLY XmlData.nodes(‘//book‘) as X(ids) ;
 76 --exist()
 77 select XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) as BookID
 78     from Xml_Table
 79     where XmlData.exist(‘(/book/@id)‘)=1 --判断是否存在
 80
 81
 82 --新建测试表
 83 create table Books(ID nvarchar(32) not null,Name nvarchar(64));
 84 insert into Books values (‘0001‘,‘MSSQLServer2005‘); --书名MSSQLServer2005
 85 insert into Books values (‘0002‘,‘MSSQLServer2008‘); --书名MSSQLServer2008
 86 insert into Books values (‘0003‘,‘MSSQLServer2012‘); --书名MSSQLServer2012
 87 --以下为xml   path
 88 SELECT ID,NAME FROM [dbo].[Books] FOR XML AUTO;
 89 SELECT ID,NAME FROM [dbo].[Books] FOR XML AUTO ,ELEMENTS ,ROOT(‘books‘);
 90 SELECT ID as ‘BookID‘,NAME as ‘BookName‘ FROM [dbo].[Books] FOR XML RAW;
 91 SELECT ID,NAME FROM [dbo].[Books] FOR XML RAW(‘book‘) ,ELEMENTS ,ROOT(‘books‘);
 92 SELECT ID,NAME FROM [dbo].[Books] FOR XML PATH(‘‘) ;
 93 SELECT ID as ‘Detail/@ID‘,NAME as ‘Detail/Name‘ FROM [dbo].[Books] FOR XML PATH(‘Book‘), ROOT(‘Books‘);
 94 SELECT STUFF((SELECT ‘;‘ + Name FROM [dbo].[Books] FOR XML PATH(‘‘)),1,1,‘‘);
 95
 96 --根据Books 表中的ID,Xml_Table 表中的XmlData ID属性  修改对应的 title属性
 97 --即:根据在books中编码0001的 的名称 MSSQLServer2005
 98 --修改为Xml_Table表中book编码为0001的title为 MSSQLServer2005
 99
100 declare @data xml
101 declare @id nvarchar(36)
102 declare @name nvarchar(64)
103 declare custore_name cursor for
104 select Books.ID,Xml_Table.XmlData,Books.Name
105 from Books,Xml_Table
106     where Books.ID= Xml_Table.XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘);
107  OPEN custore_name
108 FETCH NEXT FROM custore_name into @id, @data, @name
109 WHILE(@@FETCH_STATUS=0)
110  BEGIN
111   set @data.modify((‘replace value of (/book/title/text())[1] with sql:variable("@name")‘))
112   update Xml_Table set XmlData = @data where XmlData.value(‘(/book/@id)[1]‘,‘nvarchar(max)‘) = @id
113  FETCH NEXT FROM custore_name into
114     @id, @data, @name
115  END
116  CLOSE custore_name
117  deallocate custore_name
118
119  select * from Xml_Table

时间: 2024-08-03 02:20:34

sqlserver中对xml进行操作的相关文章

SqlServer 中 for xml path 相关

表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"', TypeDesc + '"}',',' FROM dbo.SYS_DicEnumType FOR XML PATH('') 这样就可以得到一个比较接近 JSON 格式的字符串,如下: {"Gender":"性别"},{"Degree":

SQL SERVER中对XML进行操作

一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XML字段的支持,相应的,T-

知方可补不足~sqlserver中对xml类型字段的操作

回到目录 在sqlserver中有很多种数据类型,而XML数据类型是比较新奇怪的一种格式,我们平常接触的可能比较少,用的也少,而在某些场合,使用XML类型可能会使我们的开发变简单,下面就是一种情况: 表test有字段Menu,它保存的信息可能有两种方式,对标准menu,扩展menu,自定义Menu等,而这些方式所需要的键/值是不同的,有些同学会说使用Json串来存储,这当然是一种很不错的方式,但是数据库并没有这种类型,所以在查询,聚合时非常困难,这些我们想到了xml格式,它是SQLSERVER的

SqlServer中以xml作为参数创建表格的存储过程

用到的工具: SqlServer java mybatis 第一步:创建function,用于获取xml中的数据 CREATE function create_table (@str xml) returns @tb table(sourceId varchar(20)) as begin insert into @tb SELECT v.value('@sourceId[1]','VARCHAR(20)') AS sourceId FROM @str.nodes('/RSSsources/rs

XML 在SQLServer中的使用

SQL Server对于XML支持的核心在于XML数据的格式,这种数据类型可以将XML的数据存储于数据库的对象中,比如variables, columns, and parameters.当你用XML数据类型配置这些对象中的一个时,你指定类型的名字就像你在SQLServer 中指定一个类型一样. XML的数据类型确保了你的XML数据被完好的构建保存,同时也符合ISO的标准.在定义一个XML数据类型之前,我们首先要知道它的几种限制,如下: 一个实例的XML列不能包含超过2GB的数据. 一个XML的

C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)

这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项目的里程碑的时候, 日本的总公司要检查我们的成果物. 成果物包括源代码, 概要设计式样书(SD,System Design), 详细设计式样书(PD, Program Design), 自动化测试等等. 源代码必须要符合编码规范(每个函数都要有注释, 方法变量的命名规则等...) 这些检查都很正常,

uinty中对Xml文件的操作

最近学习unity感觉到了瓶颈,然后就回顾一下学到的知识,将它们整理下来: unity中用户的登录与注册需要将用户名和密码保存起来的,方法有很多,如将其保存到数据库,或用JSON保存到磁盘,这里就简单说说用Xml对其进行读写操作吧: 首先,对Xml进行操作需要的命名空间是 using system.IO; using system.Xml; 先附上一段代码,再添加注释解释吧: using system.IO; using system.Xml; void Start() {     privat

MySQL与SqlServer中update操作同一个表问题

一 SqlServer中操作如下图 这个是没问题的. 二 MySQL中操作如下图 但是在MySQL中想实现这个功能如下图,但是出错了. 原来是MySQL中不支持子查询的 我们可以这样修改一下就可以实现它 看到没有,我仅仅在查询外面加了一层而已,却实现了. 代码如下: create PROCEDURE testp(in _id int) begin -- set @tt=(select id from usera where id>_id ); update usera set `names`='

SqlServer中的merge操作(转载)

SqlServer中的merge操作(转载) 今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有洞天,原来是另外一个sql关键字,t-sql的语法还是相当地丰富的.本篇是一篇学习笔记,没有什么新意,这里给出technet上的地址连接供大家参考权威:http://technet.microsoft.com/zh-cn/library/bb510625.aspx,这里具体的语法不去深究了,只是把几个例