如何对SQL Server中的XML数据进行insert、update、delete
2013-09-29 12:04
591 查看
SQLServer2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQLServer2008为例介绍如何对XML数据进行insert、update、delete。
SQLServer中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插入,删除和修改操作。
本文以下面XML为例,对三种DML进行说明:
1.XML.Modify(Insert)语句介绍
A.利用asfirst,atlast,before,after四个参数将元素插入指定的位置
结果集为:
B.将多个元素插入文档中
C.将属性插入文档中
结果集为:
D.插入文本节点
结果集为:
注意:插入本文同样具体asfirst,aslast,before,after四种选项,可以参考A中的使用方法
E.插入注释节点
结果集为:
F.插入处理指令
G.根据if条件语句进行插入
2.XML.Modify(delete)语句介绍
结果集为:
3.XML.Modify(replace)语句介绍
SQLServer中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插入,删除和修改操作。
本文以下面XML为例,对三种DML进行说明:
declare@XMLVarxml='
<catalog>
<bookcategory="ITPro">
<title>WindowsStepByStep</title>
<author>BillZack</author>
<price>49.99</price>
</book>
<bookcategory="Developer">
<title>DevelopingADO.NET</title>
<author>AndrewBrust</author>
<price>39.93</price>
</book>
<bookcategory="ITPro">
<title>WindowsClusterServer</title>
<author>StephenForte</author>
<price>59.99</price>
</book>
</catalog>
'
1.XML.Modify(Insert)语句介绍
A.利用asfirst,atlast,before,after四个参数将元素插入指定的位置
set@XMLVar.modify(
'insert<firstname="atfirst"/>asfirstinto(/catalog[1]/book[1])')
set@XMLVar.modify(
'insert<lastname="atlast"/>aslastinto(/catalog[1]/book[1])')
set@XMLVar.modify(
'insert<beforename="before"/>before(/catalog[1]/book[1]/author[1])')
set@XMLVar.modify(
'insert<aftername="after"/>after(/catalog[1]/book[1]/author[1])')
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro">
2:<firstname="atfirst"/>
3:<title>WindowsStepByStep</title>
4:<beforename="before"/>
5:<author>BillZack</author>
6:<aftername="after"/>
7:<price>49.99</price>
8:<lastname="atlast"/>
9:</book>
B.将多个元素插入文档中
--方法一:利用变量进行插入
DECLARE@newFeaturesxml;
SET@newFeatures=N';
<first>oneelement</first>
<second>secondelement</second>'
SET@XMLVar.modify(')
insertsql:variable("@newFeatures")
into(/catalog[1]/book[1])'
--方法二:直接插入
set@XMLVar.modify(')
insert(<first>oneelement</first>,<second>secondelement</second>)
into(/catalog[1]/book[1]/author[1])'
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro">
2:<title>WindowsStepByStep</title>
3:<author>BillZack
4:<first>oneelement</first>
5:<second>secondelement</second>
6:</author>
7:<price>49.99</price>
8:<first>oneelement</first>
9:<second>secondelement</second>
10:</book>
C.将属性插入文档中
--使用变量插入
declare@varnvarchar(10)='变量插入'
set@XMLVar.modify(
'insert(attributevar{sql:variable("@var")}))
into(/catalog[1]/book[1])'
--直接插入
set@XMLVar.modify(
'insert(attributename{"直接插入"}))
into(/catalog[1]/book[1]/title[1])'
--多值插入
set@XMLVar.modify(
'insert(attributeId{"多值插入1"},attributename{"多值插入2"}))
into(/catalog[1]/book[1]/author[1])'
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro"var="变量插入">
2:<titlename="直接插入">WindowsStepByStep</title>
3:<authorId="多值插入1"name="多值插入2">BillZack</author>
4:<price>49.99</price>
5:</book>
D.插入文本节点
set@XMLVar.modify(
'inserttext{"atfirst"}asfirst)
into(/catalog[1]/book[1])'
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro">
2:atfirst
3:<title>WindowsStepByStep</title>
4:<author>BillZack</author>
5:<price>49.99</price>
6:</book>
注意:插入本文同样具体asfirst,aslast,before,after四种选项,可以参考A中的使用方法
E.插入注释节点
set@XMLVar.modify(
'insert<!--插入评论-->)
before(/catalog[1]/book[1]/title[1])'
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro">
2:<!--插入评论-->
3:<title>WindowsStepByStep</title>
4:<author>BillZack</author>
5:<price>49.99</price>
6:</book>
注意插入注释节点同样具体asfirst,aslast,before,after四种选项,可以参考A中的使用方法
F.插入处理指令
set@XMLVar.modify(
'insert<?Program"Instructions.exe"?>)
before(/catalog[1]/book[1]/title[1])'
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro">
2:<?Program"Instructions.exe"?>
3:<title>WindowsStepByStep</title>
4:<author>BillZack</author>
5:<price>49.99</price>
6:</book>
注意插入处理指令同样具体asfirst,aslast,before,after四种选项,可以参考A中的使用方法
G.根据if条件语句进行插入
set@XMLVar.modify(
'insert)
if(/catalog[1]/book[1]/title[2])then
text{"thisisa1step"}
else(text{"thisisa2step"})
into(/catalog[1]/book[1]/price[1])'
SELECT@XMLVar.query('/catalog[1]/book[1]');
结果集为:
1:<bookcategory="ITPro">
2:<title>WindowsStepByStep</title>
3:<author>BillZack</author>
4:<price>49.99thisisa2step</price>
5:</book>
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:<catalog>
2:<book>
3:<author/>
4:<price>49.99</price>
5:</book>
6:<bookcategory="ITPro">
7:<title>WindowsClusterServer</title>
8:<author>StephenForte</author>
9:<price>59.99</price>
10:</book>
11:</catalog>
3.XML.Modify(replace)语句介绍
--替换属性
set@XMLVar.modify('replacevalueof(/catalog[1]/book[1]/@category))
with("替换属性")'
--替换内容
set@XMLVar.modify('replacevalueof(/catalog[1]/book[1]/author[1]/text()[1]))
with("替换内容")'
--条件替换
set@XMLVar.modify('replacevalueof(/catalog[1]/book[2]/@category))
with(
if(count(/catalog[1]/book)>4)then
"条件替换1"
else
"条件替换2")'
SELECT@XMLVar.query('/catalog[1]');
结果集为:
1:<catalog>
2:<bookcategory="替换属性">
3:<title>WindowsStepByStep</title>
4:<author>替换内容</author>
5:<price>49.99</price>
6:</book>
7:<bookcategory="条件替换2">
8:<title>DevelopingADO.NET</title>
9:<author>AndrewBrust</author>
10:<price>39.93</price>
11:</book>
12:<bookcategory="ITPro">
13:<title>WindowsClusterServer</title>
14:<author>StephenForte</author>
15:<price>59.99</price>
16:</book>
17:</catalog>
相关文章推荐
- 如何对SQL Server中的XML数据进行insert、update、delete
- 如何对SQL Server中的XML数据进行insert、update、delete
- 如何对SQL Server中的XML数据进行insert、update、delete .
- 如何对SQL Server中的XML数据进行insert、update、delete
- <转>SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- sql server 中xml 数据类型的insert、update、delete
- Command不是也可以对数据库进行insert,update,delete操作吗,为什么还需要DataAdapter。我知道DataAdapter可以用来想AataSet中填充数据,Command不可以吗?
- 在SQL Server中使用merge同时进行Insert,Update和Delete操作
- [转]Android 如何对sqlite数据库进行增删改[insert、update和delete] 操作
- discuz 如何添加数据DB::insert和更新数据DB::update 查询DB::query删除DB::delete
- Android 如何对sqlite数据库进行增删改[insert、update和delete] 操作
- SQL之merge into 批量更新数据 Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。M
- discuz 如何添加数据DB::insert和更新数据DB::update 查询DB::query删除DB::delete
- Merge(在一条语句中使用Insert,Update,Delete) 对两个表进行同步数据
- 在SQL SERVER 2005的表分区里,如何对已经存在的有数据的表进行分区
- 如何对SQL Server数据表和数据库进行迭代操作
- mybatis官网参考文档-MapperXML_insert, update 和 delete(版本: 3.4.6-SNAPSHOT)