转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : |
#|{>/------------------------------------------------------------------------\<}|
#|: | Author : 小爱 |
#|: | Description: XML modify() 方法 |
#|: | SQL Version: 适用于 SQL 2005, SQL 2008 , SQL 2012 |
#|: | Copyright : 转载请注明出处。更多请访问:http://blog.csdn.net/beirut |
#|: | Create Date: 2012-11-22 |
#|: | About Me : 一个菜鸟dba |
#|{>\------------------------------------------------------------------------/<}|
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : |
#+-----------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------------------------------------
本章讲述 modify() 方法 , modify() 方法是使用 XML DML 语句在 XML 数据中插入、更新或删除节点。
语法:modify (XML_DML) XML_DML 是 XML 数据操作语言 (DML) 中的字符串。
XML DML 将下列区分大小写的关键字添加到 XQuery 中:
insert --添加
delete --删除
replace value of --更新
------------------------------------------------------------------------------------------------------------------*/
DECLARE @x XML
SET @x='
<root>
<rogue id="001">
<hobo id="1">
<name>彪</name>
<type>流氓</type>
</hobo>
</rogue>
</root>'
------------------------------------------------------插入------------------------------------------------------------
--在 hobo 节点下插入 一个新节点
SET @x.modify('
insert <nickname>阿彪</nickname>
as first
into (/root/rogue/hobo)[1]
');
SELECT @x
--注释:如果某节点下面有多个节点的时候可以使用 as first 或 as last 来指定所需的新节点添加位置。
---在指定的 hobo 节点下,插入同一级节点
SET @x.modify('
insert <id>1</id>
before (/root/rogue/hobo)[1]
');
SELECT @x
--注释:是用 before 或者 after 关键字代替 into 在指定节点的 前面 或者 后面 插入同级节点
--after 关键字 和 before 关键字不能用于插入属性
--插入属性 一次插入多个属性值/使用变量/属性定位
DECLARE @a INT =5
SET @x.modify('
insert (
attribute a {sql:variable("@a")},
attribute b {".5"}
)
into (/root/rogue/hobo[@id=1])[1]
');
SELECT @x;
GO
----------------------------------------------------删除------------------------------------------------------------
DECLARE @x XML
SET @x='
<?Instructions for=TheWC.exe ?>
<root>
<rogue id="001">
<hobo id="1" weight="80" age="25">
<name>彪</name>
<type>流氓</type>
<nickname>阿彪</nickname>
<notes />
</hobo>
<page_hotspots />
</rogue>
<notes />
</root>'
-- 删除属性
SET @x.modify('
delete /root/rogue/hobo/@id
')
SELECT @x
-- 删除节点
SET @x.modify('
delete /root/rogue/hobo/name[1]
')
SELECT @x
-- 删除节点内容
SET @x.modify('
delete /root/rogue/hobo/type/text()
')
SELECT @x
-- 删除所有处理指令
SET @x.modify('
delete //processing-instruction()
')
SELECT @x
-- 删除所有的内容为空的节点
SET @x.modify('
delete //*[empty(./*)]
')
SELECT @x
----------------------------------------------------修改------------------------------------------------------------
DECLARE @x XML
SET @x='
<root>
<rogue id="001">
<hobo id="1" weight="80" age="25">
<name>彪</name>
<type>流氓</type>
<nickname>阿彪</nickname>
</hobo>
</rogue>
</root>'
-- 在修改语法当中 每次只能修改一个单个节点,不能批量修改或者一次修改多个值,这一点是比较郁闷的
-- 修改节点值
SET @x.modify('
replace value of (/root/rogue/hobo/name/text())[1]
with "光辉"
')
SELECT @x
-- 修改属性值
SET @x.modify('
replace value of (/root/rogue/hobo/@weight)[1]
with "70"
')
SELECT @x
-- 使用 if 表达式
SET @x.modify('
replace value of (/root/rogue/hobo/@age)[1]
with (
if (count(/root/rogue/hobo/*) > 2) then
"30"
else
"10"
)
')
SELECT @x
------------------------------------------------------一些示例------------------------------------------------------------
-- 1
DECLARE @x1 XML
SELECT @x1 = '
<rogue>
<hobo name="彪"/>
<hobo name="光辉"/>
<hobo name="小D"/>
<hobo name="野子"/>
</rogue>'
------------------------------------------------------------
-- 把 小D 移动到 彪 前面
------------------------------------------------------------
SET @x1.modify('
insert /rogue/hobo[@name="小D"]
before (/rogue/hobo[@name="彪"])[1]
')
SET @x1.modify ('
delete (/rogue/hobo[@name="小D"])[2]
')
SELECT @x1
---------- --------------------------------------------------
-- 把 光辉 移动到 野子 后面
------------------------------------------------------------
SET @x1.modify('
insert /rogue/hobo[@name="光辉"]
after (/rogue/hobo[@name="野子"])[1]
')
SET @x1.modify ('
delete (/rogue/hobo[@name="光辉"])[1]
')
SELECT @x1
------------------------------------------------------------
-- 把 野子 向前移动一级
------------------------------------------------------------
SET @x1.modify('
insert /rogue/hobo[@name="野子"]
before (/rogue/hobo[. << (/rogue/hobo[@name="野子"])[1]])[last()]
')
SET @x1.modify ('
delete /rogue/hobo[@name="野子"]
[. is (/rogue/hobo[@name="野子"])[last()]]
')
SELECT @x1
------------------------------------------------------------
-- 把 彪 向后 移一级
------------------------------------------------------------
set @x1.modify('
insert /rogue/hobo[@name="彪"]
before (/rogue/hobo[. >> (/rogue/hobo[@name="彪"])[1]])[2]
')
SELECT @x1
SET @x1.modify ('
delete (/rogue/hobo[@name="彪"])[1]
')
SELECT @x1
------------------------------------------------------------
-- 使用变量修改属性名称
------------------------------------------------------------
DECLARE @x2 XML
SELECT @x2 = '
<Employees>
<Employee FirstName="Jacob" MiddleName="V" LastName="Sebastian"/>
</Employees>'
DECLARE @var VARCHAR(20)
DECLARE @val VARCHAR(20)
SELECT @var = 'MiddleName'
SELECT @val = 'J'
SET @x2.modify('
replace value of (
/Employees/Employee/@*[local-name()=sql:variable("@var")]
)[1]
with sql:variable("@val")
')
select @x2
转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除的更多相关文章
- sql server 数据库基础学习心得 思维导图
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- Sql Server约束的学习二(检查约束、默认约束、禁用约束)
接上一篇的Sql Server约束学习一(主键约束.外键约束.唯一约束) 4.检查约束 1)检查约束的定义 检查约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另一个列的值, ...
- mysql与sql server参照对比学习mysql
mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...
- cmd常用命令 和 sql server相关基础
在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...
- Sql Server数据库基础
--------------------------------------第一章 Sql Server数据库基础------------------------------------------ ...
- 第一篇——第一文 SQL Server 备份基础
原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...
- SQL Server— 存在检测、建库、 建表、约束、外键、级联删除
/******************************************************************************** *主题: SQL Server- 存 ...
随机推荐
- 获取最外层View
获取最外层View activity.getWindow().getDecorView()
- Java网络编程(TCP客户端)
TCP传输:两个端点建立连接后会有一个传输数据的通道,这个通道就称为流,而且是建立在网络基础上的流,之为socket流,该流中既可以读取也可以写入. TCP的两个端点:一个客户端:ServerSock ...
- SQL2008-中不想插入从复记录
If not exists (SELECT ID FROM StuffAgitationYield where EMAgitation_ID=1 and YieldDateTime'2012-06-1 ...
- express源码剖析2
当使用express时,代码会这样写: var express = require('express'); 如果创建一个express的应用,代码会这样写: var app = express(); ...
- Android 添加、移除和判断 桌面快捷方式图标
思路: Launcher为了应用程序能够定制自己的快捷图标,就注册了一个 BroadcastReceiver 专门接收其他应用程序发来的快捷图标定制信息.所以只需要根据该 BroadcastRecei ...
- ajax 返回json数据操作
例子: $.ajax({ url: "<?=Url::toRoute('add-all-staff')?>", type: 'get', dataType: 'json ...
- PostgreSQL的 create index concurrently
对于PostgreSQL的 "create index concurrently". 我个人认为其中存在一个bug. 我的验证过程如下: 我有两个表,tab01和 tab02,这两 ...
- 某项目 需要在UITabbar 上显示小红点,在此搜罗了三个方法。
1.使用系统自带的,并且可以在小红点上显示数字. [itemOne setBadgeValue:@""]; //显示不带数字的小红点 [itemOne setBadgeValue: ...
- Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
使用了极光推送的 jar 包项目在从 SVN 中检出后,假设不又一次对 jar 包和 Bulid Path 进行配置就会抛出 java.lang.NoClassDefFoundError: cn.jp ...
- linux和windows文件名称长度限制
Linux文件名称的长度限制是255个字符 windows下全然限定文件名称必须少于260个字符,文件夹名必须小于248个字符. linux下文件数.文件夹数.文件名称长度的各种限制 下面測试都是在没 ...