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. ViewController的生命周期

    # ViewController 的生命周期 # ViewController的生命周期中各个方法的流程如下: init loadView :加载view viewDidLoad :view加载完毕 ...

  2. iOS 面试总结 一

    iOS 开发工程师之面试总结一 好久没有出去面试了,大概一年的时间都很稳定,最近出去面试感觉心里特别慌,没有了当时的勇气了,其实还是感觉自己的准备不是特别的充分,这是主要原因. 这段时间待得太安逸没了 ...

  3. innerHTML on ie6-9

    https://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx The innerHTML property is read-only on ...

  4. c# GridControl怎么换行

    百度找到的答案 1.ColumnEdit 增加 MemoEdit2.AppearanceCell-TextOptions- WordWrap3.OptionsView RowAutoHeight

  5. Unity小游戏制作 - 暗影随行

    用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...

  6. LoadingView

    // //  LoadingView.h //  蓝桥播报 // //  Created by 小小建 on 15/7/10. //  Copyright (c) 2015年 蓝桥. All righ ...

  7. HTML和CSS经典布局2

    如下图: 需求: 1. 如图 2. 可以从body标签开始. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xht ...

  8. Python黑帽编程2.5 函数

    Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...

  9. 微软CMS项目 Orchard 所用到的开源项目

    研发了Orchard一年左右了,时常遇到瓶颈,总觉得力不从心,其实并不是基础不够,关键还是概念性的东西太多,一会儿这个概念名词,一会那个,关于Orchard的技术文档也的确很少,每次看起来总是焦头烂额 ...

  10. React源码剖析系列 - 生命周期的管理艺术

    目前,前端领域中 React 势头正盛,很少能够深入剖析内部实现机制和原理.本系列文章希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. 对于 React,其组件生命周期(C ...