SQL Server中的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= ‘

<catalog>

<book category=”itpro”>

<title>windows step by step</title>

<author>bill zack</author>

<price>49.99</price>

</book>

<book category=”developer”>

<title>developing ado .net</title>

<author>andrew brust</author>

<price>39.93</price>

</book>

<book category=”itpro”>

<title>windows cluster server</title>

<author>stephen forte</author>

<price>59.99</price>

</book>

</catalog>

1.xml.modify(insert)语句介绍

a.利用as first,at last,before,after四个参数将元素插入指定的位置


复制代码 代码如下:

set @xmlvar.modify(

‘insert <first name=”at first” /> 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]’);

结果集为:


复制代码 代码如下:

1: <book category=”itpro”>

2: <first name=”at first” />

3: <title>windows step by step</title>

4: <before name=”before” />

5: <author>bill zack</author>

6: <after name=”after” />

7: <price>49.99</price>

8: <last name=”at last” />

9: </book>

b.将多个元素插入文档中


复制代码 代码如下:

–方法一:利用变量进行插入

declare @newfeatures xml;

set @newfeatures = n’; <first>one element</first> <second>second element</second>’

set @xmlvar.modify(‘ )

insert sql:variable(“@newfeatures”)

into (/catalog[1]/book[1])’

–方法二:直接插入

set @xmlvar.modify(‘)

insert (<first>one element</first>,<second>second element</second>)

into (/catalog[1]/book[1]/author[1])’

select @xmlvar.query(‘/catalog[1]/book[1]’);

结果集为:


复制代码 代码如下:

1: <book category=”itpro”>

2: <title>windows step by step</title>

3: <author>bill zack

4: <first>one element</first>

5: <second>second element</second>

6: </author>

7: <price>49.99</price>

8: <first>one element</first>

9: <second>second element</second>

10: </book>

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: <book category=”itpro” var=”变量插入”>

2: <title name=”直接插入”>windows step by step</title>

3: <author id=”多值插入1″ name=”多值插入2″>bill zack</author>

4: <price>49.99</price>

5: </book>

d.插入文本节点


复制代码 代码如下:

set @xmlvar.modify(

‘insert text{“at first”} as first)

into (/catalog[1]/book[1])’

select @xmlvar.query(‘/catalog[1]/book[1]’);

结果集为:


复制代码 代码如下:

1: <book category=”itpro”>

2: at first

3: <title>windows step by step</title>

4: <author>bill zack</author>

5: <price>49.99</price>

6: </book>

注意:插入本文同样具体 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: <book category=”itpro”>

2: <!–插入评论–>

3: <title>windows step by step</title>

4: <author>bill zack</author>

5: <price>49.99</price>

6: </book>

注意插入注释节点同样具体 as first,as last,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: <book category=”itpro”>

2: <?program “instructions.exe” ?>

3: <title>windows step by step</title>

4: <author>bill zack</author>

5: <price>49.99</price>

6: </book>

注意插入处理指令同样具体 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: <book category=”itpro”>

2: <title>windows step by step</title>

3: <author>bill zack</author>

4: <price>49.99this is a 2 step</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: <book category=”itpro”>

7: <title>windows cluster server</title>

8: <author>stephen forte</author>

9: <price>59.99</price>

10: </book>

11: </catalog>

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: <catalog>

2: <book category=”替换属性”>

3: <title>windows step by step</title>

4: <author>替换内容</author>

5: <price>49.99</price>

6: </book>

7: <book category=”条件替换2″>

8: <title>developing ado .net</title>

9: <author>andrew brust</author>

10: <price>39.93</price>

11: </book>

12: <book category=”itpro”>

13: <title>windows cluster server</title>

14: <author>stephen forte</author>

15: <price>59.99</price>

16: </book>

17: </catalog>

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐