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)
- sql如何查找10个以上的数据(SQL中查找某几个字段完全一样的数据)
- mysql备份工具怎么选(MySQL使用Xtrabackup备份流程详解)
- myeclipse连接mysql数据库的方法(教你用eclipse连接mysql数据库)
- sql server 分布式事务(Sql Server事务语法及使用方法实例分析)
- SQL Server日期与字符串之间的转换
- sqlserver查看数据表更新时间(SQL Server实现显示每个类别最新更新数据的方法)
- sqlserver调试存储过程(sql server2008调试存储过程的完整步骤)
- sqlserver字符串格式化(SQL server中字符串逗号分隔函数分享)
- SQL Server数据库备份的几个建议
- mysql查看视图注释(详解MySQL的sql_mode查询与设置)
- mysql优化方案最新(记一次MySQL的优化案例)
- sqlserver的图形表(SQL Server纵表与横表相互转换的方法)
- sql server中随机函数NewID()和Rand()
- mysql一般使用的事务隔离级别(详解MySQL中事务隔离级别的实现原理)
- SqlServer中如何解决session阻塞问题(SqlServer中如何解决session阻塞问题)
- mysql和utf8哪个好(为什么在MySQL中不建议使用UTF-8)
- 吉林舒兰 封城 聚集性疫情传播链已延至沈阳,有一个细节让人忧心(吉林舒兰封城)
- 1天密接者猛增77人,患者轨迹透露危险信号 吉林市全面封闭管理(1天密接者猛增77人)
- 吉林舒兰 封城 15人确诊 276人隔离,出现跨省传播(吉林舒兰封城)
- 四月新番CP人气榜公布,《剃须》两度上榜,沙优不是女朋友(四月新番CP人气榜公布)
- 2019年外媒秋季新番动画角色CP排行榜,桐人和爱丽丝落榜(2019年外媒秋季新番动画角色CP排行榜)
- 新一小兰领衔 盘点动漫中的那些 远距离恋爱情侣(盘点动漫中的那些)
热门推荐
- 阿里云服务器扩容了怎么恢复(一条命令解决阿里云服务器系统盘空间不足问题)
- dedecms搜索设置(织梦dedecms默认作者和默认来源修改方法)
- iis搭建网站的地址(IIS站点所有文件直接下载 强制下载)
- xampp在什么操作系统中不能使用(xampp apache启动失效问题的解决方法)
- docker python如何运行(Docker容器化部署Python应用过程解析)
- vue封装一个功能函数(vue中利用mqtt服务端实现即时通讯的步骤记录)
- vue接口请求类封装(Vue接口封装的完整步骤记录)
- css3样式设计图片(CSS3 制作的彩虹按钮样式)
- :link,:visited,:focus,:hover,:active的用法
- js解除网页屏蔽(js检测标题与描述中的关键词发现就替换或跳转到别的页面)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9