首页>计算机>软件水平考试>复习指导>正文
软件水平考试:SQLServer2005的XML数据类型之基础篇[3]

www.zige365.com 2008-12-2 13:18:59 点击:发送给好友 和学友门交流一下 收藏到我的会员中心


SET @doc.modify('
insert <Pitcher role="Starter"
name="Jaret Wright"/>
before (/Team/Players/Pitcher)[1]
')

  这个into子句把InsertExpression作为LocationExpression的一个孩子结点插入。可选子句as first和as last用于指定在该孩子结点中插入的位置:

  --在小组内进行插入

SET @doc.modify('
insert <Pitcher role="Starter"
name="Jaret Wright"/>
into (/Team/Players)[1]
')

  --在小组内进行插入,指定它应该

  --作为最后一个元素插入

SET @doc.modify('
insert <Pitcher role="Starter"
name="Jaret Wright"/>
as last into (/Team/Players)[1]
')

  delete语句的语法很直接:

delete LocationExpression

  这个LocationExpression指定要从XML数据中删除什么内容。例如,要删除所有的投球手:

SET @doc.modify('delete/Team/Player/Pitcher')

  因为查询指定所有的投球手元素,所以它们将被全部删除。如果你想仅删除一个元素,那么你可以指定标识属性。例如,为了仅删除投球手John Smoltz,你可以编写如下的delete语句:

SET @doc.modify('
delete /Team/Players/Pitcher[@name="John Smoltz"]
')

  你可以使delete语句删除单个属性。例如,为了删除针对投球手John Smoltz的role属性,相应的XML DML看上去如下所示:

SET @doc.modify('
delete /Team/Players/Pitcher[
@name="John Smoltz"]/@role')

  最后,replace value语句描述了对XML数据的修改。这个replace value语句的语法如下:

replace value of
OriginalExpression
with
ReplacementValue | if

  这个replace value语句用来修改在XML中的值。唯一可能的值是一个标签的内容或一个属性的值。这个OriginalExpression必须解析为单个结点或属性。这个ReplacementValue通常是一个要代替的值。代替一个结点的内容要求使用text()函数的XQuery表达式来指定你想代替一个结点的文本。例如,为了替换一个投球手的内部文本(inner text),你可以编写类似如下的Modify语句:

DECLARE @doc xml
SELECT @doc = '
<Team name="Braves">
<Players>
<Pitcher name="John Smoltz" role="Closer">
With team since 1989
</Pitcher>
</Players>
</Team>'
SET @doc.modify('
replace value of (/Team/Players/Pitcher[
@name="John Smoltz"]/text())[1]
with "May start in 2005"
')

  修改属性是直接的:你只需要使用XQuery表达式来解析单个属性。例如,为了使用"Starter"替换投球手John Smoltz的role属性的值,你可以编写如下的语句:

SET @doc.modify('
replace value of (/Team/Players/Pitcher[
@name="John Smoltz"]/@role)[1]
with "Starter"
')

  replace value语法也支持条件替换,这可以通过在replace value语句的with子句内使用if…then…else语法实现。例如,如果John Smoltz是一个Closer的话,把他的role替换为Starter;但是如果他不是一个Starter的话,则把role属性修改为Closer;那么,你可以编写如下的代码:

SET @doc.modify('
replace value of (/Team/Players/Pitcher[
@name="John Smoltz"]/@role)[1]
with (
if (/Team/Players/Pitcher[
@name="John Smoltz"]/@role = "Closer") then
"Starter"
else
"Closer"

本新闻共2页,当前在第2页  1  2  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
软件水平考试:并非中庸之道—我看开源与微软
软件水平考试:IT咨询业发展的三道坎
计算机软件水平考试英语词汇:应用软件指南
软考辅导CIO无法抗拒的诱惑:SOA的左思与右想
软考辅导:国家科技项目监理制的有关问题探讨