通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>SQL专区>>正文 新版上线![旧版]
注:打开慢时请稍等

SQL Server2005的XML数据类型之基础篇

http://www.iyit.net  日期:2006-9-29 22:48:58  来源:  点击:
参加讨论】   modify方法

  尽管XQuery标准并没有提供一种更新XML的机制,但是SQL Server 2005提供了一种方法用于即时地修改一个XML对象的一部分。这意味着,你不必仅为了修改而检索一个完整的XML文档。为了即时修改一个文档,你可以采用一种结合方式-Modify方法和SQL Server 2005的新的XML数据修改语言(XML DML)。

  Modify方法的语法是:

modify(<XMLDML>)

  该方法仅使用一个参数:XML DML语句。XML DML也类似于SQL的insert,update和delete语法,但是并不一样。例如,你可以通过使用insert DML语句来修改XML:

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

  另外,你还可以通过调用一个UPDATE语句并修改一个XML列来实现同样目的:

  --修改一个XML文档而不完全替换它:

UPDATE Team
SET TeamDoc.modify('
insert <Pitcher name="Jaret Wright"/> as last
into (/Team/Players)[1]
')
WHERE TeamDoc.exist('/Team[@name="Braves"]') = 1

  注意,在这个UPDATE语句中的SET子句并不遵循你过去编写SQL时所使用的SET x = y 模式。该语法假定,你能够提供一个完全新的值来代替旧值-这在XML情况下意味着要使用一个完全新的文档来代替旧文档。当使用XML类型时,Modify方法可以即时修改原始文档。也就是说,对于SQL Server来说,不必要对每一次修改都试图替换整个文档。在本例中的SET语法反映了一种即时修改一个文档的更为有效的方式。

  共有三种XML DML语句:insert,update和delete。这三个语句分别用于插入,更新和删除一个XML对象的部分。每一个方法的语法类似于SQL,但是也有一些明显的差别。

  下面是相应于insert语句的语法:

insert
InsertExpression (
{{as first | as last}
into | after | before} LocationExpression
)

  紧跟着这个insert语句的是你想要插入的XML(InsertExpression)。接下来,你需要指定你想怎样插入该XML。你的选择是into,after或before。其中,before和after子句指令数据库把InsertExpression作为LocationExpression的一个兄弟(sibling)插入。before或after则指定是在LocationExpression的前面还是后面插入它:

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"
)
')

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


编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:SQL SERVER服务器的“偷梁换柱”
下一篇:SQL Artisan 1.3功能使用介绍
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
SQL SERVER服务器的“偷梁换柱” SQL SERVER 2005 同步复制技术 比较SQL Server2005和Oracle 10g R2
SQL Server安装文件挂起错误解决办法 SQL Artisan 1.3功能使用介绍 SQL SERVER服务器的“偷梁换柱”
修改SQL Server 2000身份验证模式和系统 Java编程中更新XML文档的常用方法 JSP+MYSQL+Java类优化分页
Java中四种XML解析技术 Java中关于XML的API JBuilderX+SQL Server开发hibernate
XML到Java代码的数据绑定之对象 Visual C#的SQL Server编程 Visual C#的SQL Server编程
用perl访问mysql数据库之一 用perl访问mysql数据库之二 ASP.NET中的XML表单控件
.Net的精髓-XML和SOAP(一) .Net的精髓-XML和SOAP(二) .Net的精髓-XML和SOAP(三)
ASP.NET连SQL7接口源代码 .Net中将图片数据保存到XML文档  一个用Wsh来控制SqlServer的Dcom的VBs
最新更新 热点排行 推荐新闻
通用分页存储过程,源码共享,大家共同
SQL SERVER服务器的“偷梁换柱”
SQL SERVER 2005 同步复制技术
比较SQL Server2005和Oracle 10g R2
SQL Server安装文件挂起错误解决办法
4DOS的用法
双机互联的工具LapLink的使用
DOS环境变量“全家福”
DOS命令淘金——ECHO命令的使用
终极DOS任务
MSDOS.SYS文件的设置
我的系统恢复盘
DOS使用中的常见问题解答
CMOS密码破解全攻略
DOS复兴运动
通用分页存储过程,源码共享,大家共同
SQL SERVER服务器的“偷梁换柱”
SQL SERVER 2005 同步复制技术
比较SQL Server2005和Oracle 10g R2
SQL Server安装文件挂起错误解决办法
QQ密码被盗怎么办!我教你找回密码
轻易破解Winrar,Winzip密码
备份软件GHOST使用教程
Ghost批处理命令用法详解
如何控制我的电脑只允许登录我自己的Q
QQ2006 Beta3隆重发布 实用功能一一奉
美国微软总部相中重庆15岁网络奇才(图
百度声明称遭受有史以来最大规模黑客攻
被删除系统文件恢复全攻略
使用身份验证来禁止内部用户上网 
SQL简明教程(1)
快速安装Windows操作系统独家秘籍
30秒清除Windows系统所有垃圾
系统盘符错乱的解决方案
由Windows远程桌面想到的复制粘贴问题
不输密码照样登陆操作系统
Windows下的虚拟主机设置全功略
Windows操作系统完美维护技巧
Ghost备份问题精彩解决方法集锦
菜鸟学电脑之端口基础知识
QQ号码激活的常见问题及案例分析 
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息