zoukankan      html  css  js  c++  java
  • SQL XML DML 数据修改

    作者http://topic.csdn.net/u/20091018/18/03D066B7-C204-400B-9E41-DEB9F97AC58A.html

    前段时间JJ写了个 18句话入门SQLServer XML 详见http://blog.csdn.net/jinjazz/archive/2009/08/13/4443585.aspx,最近对XML DML数据修改进行了学习,进行了一个小节,算是狗尾续貂吧。同时也宣传下自己的blog。
    1、XML DML 数据修改语言,插入
    http://blog.csdn.net/HEROWANG/archive/2009/10/18/4694009.aspx
    2、XML DML 数据修改语言,删除,修改
    http://blog.csdn.net/HEROWANG/archive/2009/10/18/4694020.aspx

    SQL code
    二、XML 数据修改语言
    insert
          Expression1 (
                     {as first | as last} into | after | before
                                        Expression2
                    )
    Expression1 :标识要插入的一个或多个节点。
    Expression2 :目标标识节点。
    into :Expression1 标识的节点作为 Expression2 标识的节点的直接后代(子节点)插入。如果 Expression2 中的节点已有一个或多个子节点,则必须使用 as first 或 as last 来指定所需的新节点添加位置。例如,分别在子列表的开头或末尾。插入属性时忽略 as first 和 as last 关键字。
    after :Expression1 标识的节点作为 Expression2 标识的节点的同级节点直接插入在其后面。after 关键字不能用于插入属性。
    before :Expression1 标识的节点作为 Expression2 标识的节点的同级节点直接插入在其前面。before 关键字不能用于插入属性。


    declare @myxml xml
    set @myxml='<?xml version="1.0" encoding="gb2312"?>
                <root>
                   <item id="1">
                   </item>
                </root>'
    select @myxml

    --1、插入item的第一个子元素
    set @myxml.modify('insert <course1>sql server2005</course1> into (root/item)[1]')
    --2、插入item的第一个子元素,插入到同级子元素前面
    set @myxml.modify('insert <sname> 王一诺</sname> as first into (root/item)[1]')
    --3、插入item的第一个子元素,插入到同级子元素后面
    set @myxml.modify('insert <grade>82</grade> as last into (root/item)[1]')
    --4、插入第二个item节点
    set @myxml.modify('insert <item id="2" year="2009"></item> into (/root)[1]')
    --或者
    set @myxml.modify('insert <item id="2" year="2009"></item> after (/root/item)[1]')
    --5、向第二个item节点插入多个元素
    set @myxml.modify('insert (<sname>王海</sname>,<course1>sql server2005</course1>,<grade>75</grade>) into (/root/item)[2]')
    --6、插入属性
    set @myxml.modify('insert attribute year{"2009"} into (/root/item)[1]')
    select @myxml
    --7、插入多个属性
    set @myxml.modify('insert (attribute depart{"计算机"},attribute class{"1班"}) into (/root/item)[1]')
    --8、插入文本节点
    set @myxml.modify('insert text{"成绩表"} as first into (/root)[1]')

    --9、插入整个节点
    set @myxml.modify('insert <item id="3" year="2009">
                               <sname>王若天</sname>
                               <course1>oracle</course1>
                               <grade>59</grade></item>
                         into (/root)[1]')
    --10、插入处理指令
    SET @myxml.modify('insert <?Program ="Instructions.exe" ?> before (/root)[1] ')  
    select @myxml
    二、删除操作
    declare @myxml xml
    set @myxml='<?Program ="Instructions.exe" ?>
              <root>成绩表--这是个文本节点
                 <item id="1" year="2009" depart="计算机" class="1班">
                   <sname> 王一诺</sname>
                   <course1>sql server2005</course1>
                   <grade>82</grade>
                 </item>
                 <item id="2" year="2009" class="1班">
                   <sname>王海</sname>
                   <course1>sql server2005</course1>
                   <grade>75</grade></item>
                 <item id="3" year="2009" class="1班">
                   <sname>王若天</sname>
                   <course1>oracle</course1>
                   <grade>59</grade>
                 </item>
               </root>'

    --1、删除所有指令
    set @myxml.modify('delete //processing-instruction()')
    select '删除所有指令'=@myxml
    --2、删除文本节点
    set @myxml.modify('delete /root/text()')
    select '删除文本节点'=@myxml
    --3、删除节点id为的属性
    set @myxml.modify('delete /root/item[@id=1]/@class')
    select '删除节点id为的属性'=@myxml
    --4、删除第二个节点属性
    set @myxml.modify('delete /root/item[2]/@class')
    select '删除第二个节点属性'=@myxml
    --5、删除节点属性
    set @myxml.modify('delete /root/item/@class')
    select '删除节点属性'=@myxml
    --6、删除节点id为的元素
    set @myxml.modify('delete /root/item[@id=1]/grade')
    select '删除节点id为的元素'=@myxml
    --7、删除第二个节点元素
    set @myxml.modify('delete /root/item[2]/grade')
    select '删除第二个节点元素'=@myxml
    --8、删除元素
    set @myxml.modify('delete /root/item/grade')
    select '删除元素'=@myxml
    --9、删除id为的节点
    set @myxml.modify('delete /root/item[@id=2]')
    select '删除id为的节点'=@myxml
    --10、删除第二个的节点
    set @myxml.modify('delete /root/item[2]')
    select '删除id为的节点'=@myxml
    --11、删除第二个节点
    set @myxml.modify('delete /root/item')
    select '删除节点'=@myxml
    三、修改操作
    --1、修改文本的值
    set @myxml.modify('replace value of(/root/text())[1] with "1班成绩表"')
    select @myxml
    --2、修改元素的值
    set @myxml.modify('replace value of(/root/item[@id=3]/grade/text())[1] with "60"')
    select @myxml
    --3、修改属性的值
    set @myxml.modify('replace value of(/root/item[@id=1]/@class)[1] with "2班"')
    select @myxml

  • 相关阅读:
    第十讲:网络虚拟化(二)
    第九讲:网络虚拟化(一)
    第十二讲:存储虚拟化(二)
    第十一讲:存储虚拟化(一)
    第八讲:I/O虚拟化
    第七讲:内存虚拟化
    第六讲:CPU虚拟化
    node to traverse cannot be null!
    利用 squid 反向代理提高网站性能(转载)
    Servlet自动加载
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175847.html
Copyright © 2011-2022 走看看