SQL如何操作Xml字段
SQL如何操作Xml字段
SQL如何操作Xml字段SQL操作Xml字段实例
一、查询操作
在定义了一个XML类型的数据之后,我们最常用的就是查询操作,下面我们来介绍如何使用SQL语句来进行查询操作的。
在T-Sql中,提供了两个对XML类型数据进行查询的函数,分别是query(xquery)和value(xquery, dataType),其中,query(xquery)得到的是带有标签的数据,而value(xquery, dataType)得到的则是标签的内容。接下类我们分别使用这两个函数来进行查询。
1、使用query(xquery) 查询
我们需要得到书的标题(title),使用query(xquery)来进行查询,查询语句为:
select @xmlDoc.query('/book/title')
2、使用value(xquery, dataType) 查询
同样是得到书的标题,使用value函数,需要指明两个参数,一个为xquery, 另一个为得到数据的类型。看下面的查询语句:
select @xmlDoc.value('(/book/title)[1]', 'nvarchar(max)')
3、查询属性值
无论是使用query还是value,都可以很容易的得到一个节点的某个属性值,例如,我们很希望得到book节点的id,我们这里使用value方法进行查询,语句为:
select @xmlDoc.value('(/book/@id)[1]', 'nvarchar(max)')
4、使用xpath进行查询
xpath是统一的Xml查询语句。使用XPath可以方便的得到想要的节点,而不用使用where语句。例如,我们在@xmlDoc中添加了另外一个节点
例如:得到id为0002的book节点
select @xmlDoc.query('(/root/book[@id="0002"])')
二、修改操作
SQL的修改操作包括更新和删除。SQL提供了modify()方法,实现对Xml的修改操作。modify方法的参数为XML修改语言。XML修改语言类似于SQL 的Insert、Delete、UpDate,但并不一样。
1,我们先建一个表:Student(id,content /xml)
create table Student
(id int primary key,content xml)
insert into dbo.Student
values(1000,'<Students>
<Student id="1001">
<name>aaa</name>
<age>20</age>
<birthday>1991-2-20</birthday>
</Student>
<Student id="1002">
<name>bbb</name>
<age>21</age>
<birthday>1990-2-20</birthday>
</Student>
</Students>')
2,添加学生节点,就是添加一个学生,用到modify的insert into语句,后面的/为xml节点的路径。
update dbo.Student
set content.modify('
insert <Student id="1003">
<name>aaa</name>
<age>20</age>
<birthday>1991-2-20</birthday>
</Student>
as last
into (/Students)[1]
')
3,添加属性,用到modify的insert into语句。
update dbo.Student
set content.modify('
insert attribute sex {"男"}
into (/Students/Student[@id="1003"])[1]
')
4,添加字段add,用到modify的insert into语句。
update dbo.Student
set content.modify('
insert <add>江苏丰县</add>
as last
into (/Students/Student[@id="1003"])[1]
')
5,删除学生节点,用到modify的delete语句,[@id="1003"]为删除的条件,像t-sql中的where一样。
update dbo.Student
set content.modify('
delete /Students/Student[@id="1003"]
')
6,更改学生节点字段,用到modify语句中的replace语句,text()表示的是add节点的值。
update dbo.Student
set content.modify('
replace value of (/Students/Student[@id="1003"]/add/text())[1]
with "江苏徐州"
')
7,更改学生节点属性,用到modify语句中的replace语句,@id表示的是add节点的属性的值。
update dbo.Student
set content.modify('
replace value of (/Students/Student[@id="1003"]/@id)[1]
with 1004
')
8,查询所有学生的ID和姓名。
select Student1.content.value('./@id','int') as ID,
Student1.content.value('(/Students/Student/name)[1]','nvarchar(30)') as StuName
from dbo.Student
CROSS APPLY content.nodes('/Students/Student') as Student1(content)
- SQLServer数据库中开启CDC导致事务日志空间被占满的原因(SQLServer数据库中开启CDC导致事务日志空间被占满的原因)
- sqlserver字段说明(详解SQL Server 中 JSON_MODIFY 的使用)
- mysql编码设置
- SQL Server Check 约束
- dedecms栏目怎么调用友情链(DedeCms用SQL语句调用数据库任意内容方法)
- sqlserver数据库备份怎么还原(SQL Server2012数据库备份和还原的教程)
- mysql数据表实例教程(mysql数据库入门第一步之创建表)
- docker部署mysql多实例(Docker部署mysql一主一从的操作方法)
- oracle如何用脚本文件创建表空间(MySQL版oracle下scott用户建表语句实例)
- sqlserver完全删除教程(sql server编写archive通用模板脚本实现自动分批删除数据)
- 修改mysql安装服务名称(Apache为mysql以及自己的项目设置虚拟路径)
- mysql基本查询方法(MySQL 重写查询语句的三种策略)
- mysql存储引擎是什么(详解mysql中的存储引擎)
- sqlserver常用数据结构图(Sql Server数据库常用Transact-SQL脚本推荐)
- MongoDB命令与SQL语法对比
- mysql存储过程遍历数据(Mysql 存储过程中使用游标循环读取临时表)
- 花不语 下 如果重来一次的话,你还会这么选择吗(花不语下如果重来一次的话)
- 城市记忆之上海 最难忘的是老弄堂里的市井味道(城市记忆之上海)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
- 节日我在岗|警景相融 平安相伴(节日我在岗警景相融)
- 战 疫 时刻 致敬每一位石化大学的 守护者(战疫时刻)
热门推荐
- 数据库负载均衡的原理(理解web服务器和数据库的负载均衡以及反向代理)
- JQuery中extend的用法
- laravel框架学习心得教程(Laravel5.7 Eloquent ORM快速入门详解)
- canvas宽高技巧(canvas画图被放大且模糊的解决方法)
- laravel授权怎么用(laravel 使用auth编写登录的方法)
- sql server查看之前的代码(SQL Server简单实现数据的日报和月报功能)
- myeclipse连接mysql数据库的方法(教你用eclipse连接mysql数据库)
- wamp系统设置教程(浅谈本地WAMP环境的搭建)
- docker重新加载nginx(Docker Nginx Log 三者的处理详解)
- css中的background:transparent的作用