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操作的更多相关文章

  1. sql初始化XML操作

    /// <summary> /// 添加记录 /// </summary> /// <param name="sender"></para ...

  2. 一个由正则表达式引发的血案 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. 一些特殊字符,如“&”,“- ...

  3. (转)SQL对Xml字段的操作

    T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和 ...

  4. SQL对Xml字段的操作

    转:http://www.cnblogs.com/youring2/archive/2008/11/27/1342288.html T-Sql操作Xml数据 一.前言 SQL Server 2005 ...

  5. (轉載)sql server xml字段的操作

    原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 另外可參考:https://msdn.microsoft.com/en-us/li ...

  6. SQL Server XML数据解析

    --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <In ...

  7. 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)

    一.初识MySQL数据库 ###<1>数据库概述     1. 数据库         长期存储在计算机内的,由组织的可共享的数据集合         存储数据的仓库         文件 ...

  8. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  9. Sql Server xml 类型字段的增删改查

    1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...

随机推荐

  1. form操作

    1, /* 封装操作表单的常用方法 */ //获取要保存的数据 wjh 2015-10-22 function getSaveData(className) { if (className == nu ...

  2. 创建Chrome启动器

    今天清理垃圾时不知怎么把chrome启动器删除了,现在要重新创建一个 1.在桌面创建一个chrome.exe的快捷键方式,属性更改目标为: "C:\Program Files (x86)\G ...

  3. grunt-connect-proxy解决开发时跨域问题

    最近的项目中前后端是完全分离开发的,前端用grunt管理项目.这样就会导致一个问题:开发时前端调用后台的接口时因为不在一个服务器,所以会出现跨域问题.但是也不能用JSONP或CROS方式实现真正的跨域 ...

  4. (转)win7 64 安装mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory

    原文地址:http://www.cnblogs.com/fnng/p/4115607.html 作者:虫师 今天想在在win7 64位环境下使用python 操作mysql 在安装MySQL-pyth ...

  5. mac与windows通过ftp传输文件

    1.两个系统相互传文件,比较通用的方式是用QQ,两台电脑一台各登陆一个qq,发文件就行了,在同一个网段时,qq会自动转换为按局域网的方式传输. 2.本人不愿安装qq,以ftp方式进行传输,先在wndo ...

  6. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别

    ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...

  7. centos 格式化分区

    #格式化U盘,成fat32 fdisk -l #获取U盘设备信息 #Disk /dev/sdc: 16.0 GB, 16025387008 bytes, 31299584 sectors#Units ...

  8. Replace 删除、替换函数精解示例

    '************************************************************************* '**模 块 名:Replace函数精解示例 '* ...

  9. 1035-Spell checker(模糊匹配)

    一,题意: 给出一组字典的单词,以'#'结束,之后给出一组要执行模糊匹配的单词序列,以'#'结束 1,若某个单词能在字典中找到,则输出corret 2,若某个单词能通过 变换 或 删除 或 添加一个字 ...

  10. ASP.NET Web API 接口执行时间监控

    软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥.如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一. 在本文中,我将解释 ...