您的位置:首页 > 数据库

试用SQL Server 2008增强的XML DML功能

2008-06-07 15:28 381 查看
XML DML(XML数据修改语言)是XQuery语言的扩展。根据W3C的定义,XQuery语言缺少数据操作(DML)部分。本节介绍SQL Server 2008中的XML DML,使用它们对可以对XML数据类型进行操作。XML DML将会使用区分大小写的关键字添加到XQuery中,包括:insert、delete和replace value of。
1.插入insert
使用针对XML的DML语句insert,可以向XML文档中插入属性或元素,而且还可以指定插入的位置。使用语法如下:

insert
Expression1 (
{as first | as last} into | after | before
Expression2
)

其中,Expression1用于标识要插入的一个或多个节点。into参数可将Expression1标识的节点作为Expression2标识的节点的直接后代(子节点)插入。如果Expression2中的节点已有一个或多个子节点,则必须使用as first或as last来指定所需的新节点添加位置。after参数作用是将Expression1标识的节点作为Expression2标识的节点的同级节点直接插入在其后面。before参数作用则与after相反,它会将Expression1标识的节点作为Expression2标识的节点的同级节点直接插入在其前面。Expression2参数是一个普通的标识节点。
例如,首先声明一个XML类型的变量EmployeeInfo,再为其添加XML数据。

DECLARE @EmployeeInfo xml
SET @EmployeeInfo=
'<row>
<员工编号>1018</员工编号>
<员工姓名>祝红涛</员工姓名>
</row>
'

现在向EmployeeInfo的XML内容中添加一个新元素,新元素的内容为“<所任职位>员工</所任职位>”,位置为最底部。编写如下语句完成插入操作:

SET @EmployeeInfo.modify(
'insert <所任职位>员工</所任职位>
as last
into (/row)[1] '
)

插入完成后,再通过如下语句来查看最终结果:

select @EmployeeInfo

执行上述语句后最初变量EmployeeInfo里的XML文档被插入一个新元素“<所任职位>”,现在的结果如下所示:

<row>
<员工编号>1018</员工编号>
<员工姓名>祝红涛</员工姓名>
<所任职位>员工</所任职位>
</row>

2.delete
delete语句可以删除XML实例中的元素,它的是语法很简单,如下所示:

delete Expression

参数Expression用于标识要删除节点的XQuery表达式。执行时会删除该表达式选择的所有节点,以及所选节点中的所有节点或值,而且这个表达式不能是根"/"节点。
例如,使用如下的语句可以将前面在EmployeeInfo变量插入的元素“<所任职位>”。

SET @EmployeeInfo.modify(
'delete /row/所任职位
')

3.replace value of
在前面简单介绍了使用XML DML的insert和delete语句来插入和删除XML文档中的内容,最后来介绍一下如何使用replace value of子句对XML文档中的节点进行更新。如下所示是它的语法形式:

replace value of
Expression1
with
Expression2

语法中,Expression1参数为要更新的节点,它必须仅标识一个单个节点,即必须是一个静态单独节点。如果XML已类型化,则节点的类型必须是简单类型,如果选择了多个节点则会出现错误。Expression2则是新节点的值,如果该值是值列表,则update语句将使用此列表替换旧值。

提示
在修改类型化的XML实例中,Expression2必须是Expression1的相同类型或子类型。否则将返回错误。
例如,使用下面的语句可以将前面创建EmployeeInfo变量中的“所任职位”元素的值进行替换,执行后元素的将值从“员工”修改为“主管”。

SET @EmployeeInfo.modify(
'replace value of(/row/所任职位[1]/text())[1]
with "主管"
')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: