您的位置:首页 > 数据库

如何对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进行说明:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐