转载---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- 存 ...
随机推荐
- Java List 用法代码分析 非常详细
Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...
- python 使用dict和set
dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...
- mysql登陆报错(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2))
部署mysql版本信息 version: 5.6.21 具体现象: mysql服务能够正常启动如下: [root@localhost ~]# service mysqld restart Shutti ...
- hdoj 1162 Eddy's picture
并查集+最小生成树 Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- android最快的模拟器
https://www.genymotion.com/ genymotion Genymotion是一套完整的工具,它提供了Android虚拟环境.它简直就是开发者.测试人员.推销者甚至是游戏玩家的福 ...
- ASP.NET奇葩说
1.form表单 在asp.net中(即runat="server"特性时)method默认值为post 在html中默认是get. 2.Web应用程序项目和网站项目:前者后台文 ...
- 幻灯片(jquery实现)
html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- eclipse 护眼色
eclipse windows 窗口背景颜色 保护视力 博客分类: 工具使用 EclipseWindows eclipse 窗口背景颜色 windows 窗口背景颜色
- XMPP——Smack[6]离线消息和离线文件的实现
终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...
- Codeforces Round #319 (Div. 1) C. Points on Plane 分块
C. Points on Plane Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/576/pro ...