SQL Server中的XML数据进行insert、update、delete操作实现代码

前端之家收集整理的这篇文章主要介绍了SQL Server中的XML数据进行insert、update、delete操作实现代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sql Server中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插入,删除修改操作。
本文以下面XML为例,对三种DML进行说明:
<div class="codetitle"><a style="CURSOR: pointer" data="11964" class="copybut" id="copybut11964" onclick="doCopy('code11964')"> 代码如下:

<div class="codebody" id="code11964">
declare @XMLVar XML;
SET @XMLVar= '
<book category="ITPro">
Windows Step By Step
Bill Zack
49.99

<book category="Developer">
Developing ADO .NET
Andrew Brust
39.93

<book category="ITPro">
Windows Cluster Server
Stephen Forte
59.99


1.XML.Modify(Insert)语句介绍
A.利用as first,at last,before,after四个参数将元素插入指定的位置
<div class="codetitle"><a style="CURSOR: pointer" data="3678" class="copybut" id="copybut3678" onclick="doCopy('code3678')"> 代码如下:
<div class="codebody" id="code3678">
set @XMLVar.modify(
'insert as first into (/catalog[1]/book[1])')
set @XMLVar.modify(
'insert <last name="at last"/> as last into (/catalog[1]/book[1])')
set @XMLVar.modify(
'insert <before name="before"/> before (/catalog[1]/book[1]/author[1])') set @XMLVar.modify(
'insert <after name="after"/> after (/catalog[1]/book[1]/author[1])')
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
<div class="codetitle"><a style="CURSOR: pointer" data="81651" class="copybut" id="copybut81651" onclick="doCopy('code81651')"> 代码如下:
<div class="codebody" id="code81651">
1: <book category="ITPro">
2:
3: Windows Step By Step
4:
5: Bill Zack
6:
7: 49.99
8:
9:

B.将多个元素插入文档中
<div class="codetitle"><a style="CURSOR: pointer" data="21172" class="copybut" id="copybut21172" onclick="doCopy('code21172')"> 代码如下:
<div class="codebody" id="code21172">
--方法一:利用变量进行插入
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]');

结果集为:
<div class="codetitle"><a style="CURSOR: pointer" data="2609" class="copybut" id="copybut2609" onclick="doCopy('code2609')"> 代码如下:<div class="codebody" id="code2609">
1: <book category="ITPro">
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.将属性插入文档中
<div class="codetitle"><a style="CURSOR: pointer" data="84856" class="copybut" id="copybut84856" onclick="doCopy('code84856')"> 代码如下:<div class="codebody" id="code84856">
--使用变量插入
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]');

结果集为:
<div class="codetitle"><a style="CURSOR: pointer" data="11559" class="copybut" id="copybut11559" onclick="doCopy('code11559')"> 代码如下:<div class="codebody" id="code11559">
1: <book category="ITPro" var="变量插入">
2: <title name="直接插入">Windows Step By Step
3: <author Id="多值插入1" name="多值插入2">Bill Zack
4: 49.99
5:

D.插入文本节点
<div class="codetitle"><a style="CURSOR: pointer" data="31449" class="copybut" id="copybut31449" onclick="doCopy('code31449')"> 代码如下:<div class="codebody" id="code31449">
set @XMLVar.modify(
'insert text{"at first"} as first)
into (/catalog[1]/book[1])'
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
<div class="codetitle"><a style="CURSOR: pointer" data="98337" class="copybut" id="copybut98337" onclick="doCopy('code98337')"> 代码如下:<div class="codebody" id="code98337">
1: <book category="ITPro">
2: at first
3: Windows Step By Step
4: Bill Zack
5: 49.99
6:

注意:插入本文同样具体 as first,as last,before,after四种选项,可以参考A中的使用方法 E.插入注释节点
<div class="codetitle"><a style="CURSOR: pointer" data="97673" class="copybut" id="copybut97673" onclick="doCopy('code97673')"> 代码如下:<div class="codebody" id="code97673">
set @XMLVar.modify(
N'insert
before (/catalog[1]/book[1]/title[1])' )
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
1: <book category="ITPro">
2:
3: Windows Step By Step
4: Bill Zack
5: 49.99
6:
注意插入注释节点同样具体 as first,as last,before,after四种选项,可以参考A中的使用方法 F.插入处理指令
<div class="codetitle"><a style="CURSOR: pointer" data="73106" class="copybut" id="copybut73106" onclick="doCopy('code73106')"> 代码如下:<div class="codebody" id="code73106">
set @XMLVar.modify(
'insert <?Program "Instructions.exe" ?>
before (/catalog[1]/book[1]/title[1])' )
SELECT @XMLVar.query('/catalog[1]/book[1]');

结果集为:
1: <book category="ITPro">
2: <?Program "Instructions.exe" ?>
3: Windows Step By Step
4: Bill Zack
5: 49.99
6:
注意插入处理指令同样具体 as first,as last,before,after四种选项,可以参考A中的使用方法 G.根据 if 条件语句进行插入
<div class="codetitle"><a style="CURSOR: pointer" data="46807" class="copybut" id="copybut46807" onclick="doCopy('code46807')"> 代码如下:<div class="codebody" id="code46807">
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: <book category="ITPro">
2: Windows Step By Step
3: Bill Zack
4: 49.99this is a 2 step
5: 2.XML.Modify(delete)语句介绍
<div class="codetitle"><a style="CURSOR: pointer" data="99146" class="copybut" id="copybut99146" onclick="doCopy('code99146')"> 代码如下:<div class="codebody" id="code99146">
--删除属性
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]');

结果集为:
<div class="codetitle"><a style="CURSOR: pointer" data="42130" class="copybut" id="copybut42130" onclick="doCopy('code42130')"> 代码如下:<div class="codebody" id="code42130">
1:
2:
3:
4: 49.99
5:

6: <book category="ITPro">
7: Windows Cluster Server
8: Stephen Forte
9: 59.99
10:
11:

3.XML.Modify(replace)语句介绍
<div class="codetitle"><a style="CURSOR: pointer" data="66293" class="copybut" id="copybut66293" onclick="doCopy('code66293')"> 代码如下:<div class="codebody" id="code66293">
--替换属性
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: <book category="替换属性">
3: Windows Step By Step
4: 替换内容
5: 49.99
6:
7: <book category="条件替换2">
8: Developing ADO .NET
9: Andrew Brust
10: 39.93
11:
12: <book category="ITPro">
13: Windows Cluster Server
14: Stephen Forte
15: 59.99
16:
17:

原文链接:https://www.f2er.com/mssql/66343.html
deletedeletedeleteinsertinsertupdateupdateupdateXML

猜你在找的MsSQL相关文章