T-Sql(五)xml操作
t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用过,但是学一点,以备不时之需。
今天就讲一下t-sql中简单的xml操作语法。
一,简单的xml操作
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)
二,xml操作实例
上面说的都是xml一些简单的操作,下面我们结合t-sql中的xml操作,存储过程和事务做一个实例,以便我们更好的去理解,运用。
实例要求:定义一个存储过程,要求传递一个xml变量类型,将xml内的指定的ID记录,从Table1全部掉,删除操作要求利用事务;
1,首先我们需要建一张表,然后插一些数据。
示例代码:
create table Table1
(
ID int primary key,
Name nvarchar(50) not null
) insert into dbo.Table1 values(1,'Name1'),(2,'Name2'),(3,'Name3')
select * from Table1
2,实例要求我们需要建一个存储过程,然后传递一个xml变量,然后将xml内的指定的ID记录,从Table1全部掉,而且删除操作用事务。
我们存储过程就得将xml进行解析得到xml中的ID记录,这个操作我们就得用到游标,游标我会在以后的做讲解,游标遍历得到的ID记录,
查询Table1表中是否存在,如果存在记录下来,并用事务去删除。
示例代码:
create proc proc_Table1
(
@ID xml
)
as
begin
declare @Temp table(ID1 int)
insert into @Temp(ID1) select ParamValues123.ID2.value('./@id','int') as asdfasdf FROM @ID.nodes('/nodes/node') as ParamValues123(ID2) begin transaction t1
declare @j int;
select @j=count(ID1) from @Temp;
declare curs_Table1 cursor for select ID1 from @Temp;
declare @ID2 int;
declare @i int;
set @i=0;
open curs_Table1;
fetch next from curs_Table1 into @ID2;
while @@FETCH_STATUS = 0
begin
if(exists(select ID from dbo.Table1 where ID=@ID2))
set @i=@i+1;
fetch next from curs_Table1 into @ID2;
end
close curs_Table1;
deallocate curs_Table1; if @i=@j
begin
delete from dbo.Table1 Where ID in
(
SELECT ParamValues123.ID2.value('./@id','int') as ID
FROM @ID.nodes('/nodes/node') as ParamValues123(ID2)
)
commit transaction t1;
end
else
rollback transaction t1;
--drop table @Temp; --select * from Table1 Where ID in
--(
--SELECT ParamValues123.ID2.value('./@id','int') as asdfasdf
--FROM @ID.nodes('/nodes/node') as ParamValues123(ID2)
--)
end
以上是t-sql中的xml简单用法,有错误的地方希望园友指正。
以后还会整理一些编程的知识分享给大家,希望大家多多关注。。。
T-Sql(五)xml操作的更多相关文章
- sql初始化XML操作
/// <summary> /// 添加记录 /// </summary> /// <param name="sender"></para ...
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- (转)SQL对Xml字段的操作
T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...
- SQL对Xml字段的操作
转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...
- (轉載)sql server xml字段的操作
原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 另外可參考:https://msdn.microsoft.com/en-us/li ...
- SQL Server XML数据解析
--5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <In ...
- 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)
一.初识MySQL数据库 ###<1>数据库概述 1. 数据库 长期存储在计算机内的,由组织的可共享的数据集合 存储数据的仓库 文件 ...
- LINQ系列:LINQ to XML操作
LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...
- Sql Server xml 类型字段的增删改查
1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...
随机推荐
- python反射问题
python中的__import__是以字符串的形式反射导入模块并以字符串的形式执行函数
- JavaWeb中读取文件资源的路径问题
在做javaweb开发的时候,我们可能会需要从本地硬盘上读取某一个文件资源,或者修改某一个文件,这个时候就需要先找到这个文件,然后用FileInputStrem等文件字节.字符流来将这个文件读取到内存 ...
- SQLServer存储过程事务用法
更多资源:http://denghejun.github.io IF object_id('InsertAntennaProcedure') IS NOT NULL DROP PROCEDURE In ...
- Unity学习疑问记录之 动作动画忽略timeScale
http://www.bubuko.com/infodetail-968864.html
- linux 中部署ant编译的包中缺少问题
今天遇到在window上部署ant编译的包,能运行正常,但部署在linux中出现跳不进jsp中,出现404问题,后来经过排查在jsp中<%@taglib prefix="c" ...
- ABP理论学习之验证DTO
返回总目录 本篇目录 验证介绍 使用数据注解 自定义验证 标准化 验证介绍 首先应该验证应用的输入.用户或者其它应用都可以向该应用发送输入.在一个web应用中,验证通常要实现两次:在客户端和服务器端. ...
- 循序渐进做项目系列(5):制作安装包,谁人都可以!——VS制作安装包简明教程
一开始让我做安装包的时候,其实我是拒绝的.因为我根本就不会做安装包.查了资料之后,我很懵,很晕,很乱,因为不清晰,不简明,不直白.然而经过一番彷徨的挣扎,我终于发现:制作安装包,谁人都可以!故挥狼毫, ...
- [nRF51822] 15、穿戴式设备上电量检测装置的设计及细节技术点(偏专业硬件文章)
穿戴式 设备如智能手环.智能手表一般采用几百毫安时的锂离子电池来供电.因此,与之配套的充电电路.稳压电路和电池电量检测电路便必不可少!本文主要谈谈该类消费类电子内部电池电量检测的一般方法及其优缺点. ...
- ASP.NET MVC Module
ASP.NET MVC Module 前言 在ASP.NET中管道模型是怎么来实现的?在请求处理流程一文中大概的讲述了Http Module和HttpApplication之间的关系,而并没有涉及到H ...
- Html5绘制时钟
最近在对Html5比较感兴趣,就用空闲时间做一些小例子进行练习,今天绘制一个走动的时钟,具体如下图所示: 具体思路在上图已有说明,代码如下: <script type="text/ja ...