小标
2018-09-07
来源 :
阅读 1971
评论 0
摘要:本文主要向大家介绍了SQLServer数据库之sqlserver中对xml进行操作,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。
本文主要向大家介绍了SQLServer数据库之sqlserver中对xml进行操作,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。
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 (‘
9
10
11
12
13 ‘);
14 insert into Xml_Table(XmlData) values
15 (‘
16
17
18
19
20 ‘);
21 insert into Xml_Table(XmlData) values
22 (‘
23
24
25
26
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
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
以上就介绍了SQL Server的相关知识,希望对SQL Server有兴趣的朋友有所帮助。了解更多内容,请关注职坐标数据库SQL Server频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号