zoukankan      html  css  js  c++  java
  • sqlserver2005 xml字段的读写操作

    1.创建xml字段
    在表xmlTest内创建一个字段,命名_x,设置数据类型为xml。
    2.写入xml
    insert into xmlTest (_x) values('
    <root>
    <item attr1="a1" attr2="a2">item11</item>
    <item attr1="a1" attr2="a2">item12</item>
    </root>
    ')
    go
    如此再插入一条记录:
    insert into xmlTest (_x) values('
    <root>
    <item attr1="b1" attr2="b2">item21</item>
    <item attr1="b1" attr2="b2">item22</item>
    </root>
    ')
    3.查询数据
    3.1 查询字段所有数据
    select _x from xmlText
    结果如图:

    3.2 查询root下面的第一个item节点
    select _x.query('root/item[1]')
    from xmlTest
    结果:

    3.3 查询root下面的第一个item节点的值
    select _x.value('(root/item)[1]','varchar(50)')
    from xmlTest
    结果:

    3.3 查询root下面的第二个item节点的attr2属性值
    select _x.value('(root/item/@attr2)[2]','varchar(50)')    //@attr2  实际使用时去掉@改为attr2
    from xmlTest
    结果:

    3.4 查询表中每条记录的xml字段的item节点值,全部列出来
    SELECT t2.c1.value('.','varchar(20)') as items
    from xmlTest
    cross apply _x.nodes('root/item') as t2(c1)
    结果:

    3.5 查询表中id=1记录的xml的所有item字段的attr2属性值
    SELECT t2.c1.value('@attr2','varchar(20)') as attr2
    from xmlTest
    cross apply _x.nodes('root/item') as t2(c1)
    where id='1'

    结果:

    3.6 查询id为1的所有节点中attr1属性为a1的第一个匹配节点的attr2属性值

    select _x.value('(root/item[@attr1="a1"]/@attr2)[1]','varchar(50)')
    from xmlTest where id='1'

    结果:

    3.7 多表查询

    例如:存在另外1个table:t2,其字段xmlid关联表xmlTest,而attr1关联xmlTest的_x字段中的attr1属性值。

    查询表xmlTest中id=‘1'记录中_x字段内item节点中attr1为表t2中attr1字段值时,item节点中attr2的属性值

    select xmlTest._x.value('(root/item[@attr1=sql:column("t2.attr1")]/@attr2)[1]','varchar(50)') as attr2,t2.attr1
    from xmlTest join t2 on t2.xmlid=xmlTest.id
    where xmlTest.id='1'

    4.修改数据
    4.1 修改表中id=1记录的第一个item节点值
    UPDATE xmlTest 
    set _x.modify('replace value of (root/item/text())[1] with "xxxxx"')
    where id='1'

    select _x.query('root/item[1]') as item1
    from xmlTest
    结果:

    4.2 修改表中id=2记录的第二个item节点的attr2属性值
    UPDATE xmlTest 
    set _x.modify('replace value of (root/item/@attr2)[2] with "2222b"')
    where id='2'

    select _x.query('root/item[2]') as item1
    from xmlTest
    结果:

  • 相关阅读:
    python 学习——sqlalchemy 模块
    python学习——数据库基本知识mysql
    算法设计22——并行算法2 实际应用中的优化
    Perl 学习
    python学习——装饰器、生成器、迭代器
    算法设计19—— 全对最短路径 Floyd算法
    asp.net Core 使用过滤器判断请求客户端是否为移动端,并实现PC端和移动端请求映射和自动跳转
    在windows平台使用Apache James搭建邮件服务器以及使用C#向外网发送邮件
    asp.net core3.1策略授权问题
    Unity调用安卓中的方法遇到的问题
  • 原文地址:https://www.cnblogs.com/y0umer/p/3839514.html
Copyright © 2011-2022 走看看