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简单用法,有错误的地方希望园友指正。

  以后还会整理一些编程的知识分享给大家,希望大家多多关注。。。


本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3373835.html,如需转载请自行联系原作者

相关文章
|
SQL XML Java
解决关于在idea使用Mybatis时, 编写xml的动态sql语句背景高亮不舒服问题
解决关于在idea使用Mybatis时, 编写xml的动态sql语句背景高亮不舒服问题
1454 0
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
69 1
|
6月前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
60 3
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
77 3
|
7月前
|
XML Java 数据库连接
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
【1月更文挑战第2天】 MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
178 2
Mybatis之简介、使用操作(安装、XML、SqlSession、映射的SQL语句、命名空间、作用域和生命周期)
|
XML SQL Java
Mybatis-Plus中实现使用xml文件来写复杂sql
Mybatis-Plus中实现使用xml文件来写复杂sql
2050 0
|
SQL XML Java
【SQL用法】Mybatis框架中的xml文件中经常使用的sql语句
【SQL用法】Mybatis框架中的xml文件中经常使用的sql语句
138 0
java202304java学习笔记第六十七天-ssm-动态sql-xml完成基本得crud之2
java202304java学习笔记第六十七天-ssm-动态sql-xml完成基本得crud之2
50 0
java202304java学习笔记第六十七天-ssm-动态sql-xml完成基本得crud之2
|
SQL XML 缓存
Mybatis源码分析 2:解析XML并映射到Sql
# XMLStatementBuilder:对单个XNode节点进行解析,得到具体的SqlSource并以此生成MappedStatement ## parseStatementNode方法: ```JAVA private final MapperBuilderAssistant builderAssistant; // 记录了当前mapper的namespace等基础信息 private
202 0
Mybatis源码分析 2:解析XML并映射到Sql
|
XML 数据格式
java202304java学习笔记第六十七天-ssm-动态sql-web中xml配置
java202304java学习笔记第六十七天-ssm-动态sql-web中xml配置
70 0