视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQLServer中的XML数据进行insert、update、delete操作实现代码
2020-11-09 09:26:04 责编:小采
文档


SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert、update、delete

SQL Server中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插入,删除和修改操作。
本文以下面XML为例,对三种DML进行说明:
代码如下:

declare @XMLVar XML;
SET @XMLVar= '



Windows Step By Step
Bill Zack
49.99


Developing ADO .NET
Andrew Brust
39.93


Windows Cluster Server
Stephen Forte
59.99


1.XML.Modify(Insert)语句介绍


A.利用as first,at last,before,after四个参数将元素插入指定的位置
代码如下:


set @XMLVar.modify(
'insert as first into (/catalog[1]/book[1])')


set @XMLVar.modify(
'insert as last into (/catalog[1]/book[1])')


set @XMLVar.modify(
'insert before (/catalog[1]/book[1]/author[1])')

set @XMLVar.modify(
'insert after (/catalog[1]/book[1]/author[1])')
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
代码如下:


1:
2:
3: Windows Step By Step
4:
5: Bill Zack
6:
7: 49.99
8:
9:


B.将多个元素插入文档中
代码如下:


--方法一:利用变量进行插入
DECLARE @newFeatures xml;
SET @newFeatures = N'; one element second element'
SET @XMLVar.modify(' )
insert sql:variable("@newFeatures")
into (/catalog[1]/book[1])'

--方法二:直接插入
set @XMLVar.modify(')
insert (one element,second element)
into (/catalog[1]/book[1]/author[1])'
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
代码如下:


1:
2: Windows Step By Step
3: Bill Zack
4: one element
5: second element
6:
7: 49.99
8: one element
9: second element
10:

C.将属性插入文档中
代码如下:


--使用变量插入
declare @var nvarchar(10) = '变量插入'
set @XMLVar.modify(
'insert (attribute var {sql:variable("@var")}))
into (/catalog[1]/book[1])'


--直接插入
set @XMLVar.modify(
'insert (attribute name {"直接插入"}))
into (/catalog[1]/book[1]/title[1])'


--多值插入
set @XMLVar.modify(
'insert (attribute Id {"多值插入1"},attribute name {"多值插入2"}) )
into (/catalog[1]/book[1]/author[1])'
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
代码如下:


1:
2: Windows Step By Step
3: Bill Zack
4: 49.99
5:


D.插入文本节点
代码如下:


set @XMLVar.modify(
'insert text{"at first"} as first)
into (/catalog[1]/book[1])'
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
代码如下:

1:
2: at first
3: Windows Step By Step
4: Bill Zack
5: 49.99
6:


注意:插入本文同样具体 as first,as last,before,after四种选项,可以参考A中的使用方法

E.插入注释节点
代码如下:


set @XMLVar.modify(
N'insert
before (/catalog[1]/book[1]/title[1])' )
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
1:
2:
3: Windows Step By Step
4: Bill Zack
5: 49.99
6:

注意插入注释节点同样具体 as first,as last,before,after四种选项,可以参考A中的使用方法

F.插入处理指令
代码如下:


set @XMLVar.modify(
'insert
before (/catalog[1]/book[1]/title[1])' )
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
1:
2:
3: Windows Step By Step
4: Bill Zack
5: 49.99
6:

注意插入处理指令同样具体 as first,as last,before,after四种选项,可以参考A中的使用方法

G.根据 if 条件语句进行插入
代码如下:


set @XMLVar.modify(
'insert
if (/catalog[1]/book[1]/title[2]) then
text{"this is a 1 step"}
else ( text{"this is a 2 step"} )
into (/catalog[1]/book[1]/price[1])' )
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
1:
2: Windows Step By Step
3: Bill Zack
4: 49.99this is a 2 step
5:

2.XML.Modify(delete)语句介绍
代码如下:


--删除属性
set @XMLVar.modify('delete /catalog[1]/book[1]/@category')


--删除节点
set @XMLVar.modify('delete /catalog[1]/book[1]/title[1]')


--删除内容
set @XMLVar.modify('delete /catalog[1]/book[1]/author[1]/text()')


--全部删除
set @XMLVar.modify('delete /catalog[1]/book[2]')

SELECT @XMLVar.query('/catalog[1]');

结果集为:
代码如下:


1:
2:
3:
4: 49.99
5:

6:
7: Windows Cluster Server
8: Stephen Forte
9: 59.99
10:

11:

3.XML.Modify(replace)语句介绍
代码如下:


--替换属性
set @XMLVar.modify(N'replace value of(/catalog[1]/book[1]/@category)
with ("替换属性")' )
--替换内容
set @XMLVar.modify(N'replace value of(/catalog[1]/book[1]/author[1]/text()[1])
with("替换内容")' )
--条件替换
set @XMLVar.modify(N'replace value of (/catalog[1]/book[2]/@category)
with(
if(count(/catalog[1]/book)>4) then
"条件替换1"
else
"条件替换2")' )

SELECT @XMLVar.query('/catalog[1]');
[code]
结果集为:
[code]
1:
2:
3: Windows Step By Step
4: 替换内容
5: 49.99
6:

7:
8: Developing ADO .NET
9: Andrew Brust
10: 39.93
11:

12:
13: Windows Cluster Server
14: Stephen Forte
15: 59.99
16:

17:

下载本文
显示全文
专题