按时烧香 2023-12-18 22:28 采纳率: 11.1%
浏览 3
已结题

xml.modify.update.replace value of问题

今天整Microsoft.SQL.Server.2012遇到一个麻烦的问题,前提代码:

    DECLARE @XML_CACHE XML,@FITEMID INT,@IDA INT=4
    SET @XML_CACHE='<row ID="1" FItemID="131" FNumber="001" FName="中国人民银行营业处" FFullName="中国人民银行营业处" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDn4=" />
                    <row ID="2" FItemID="132" FNumber="011" FName="中国人民银行国库处" FFullName="中国人民银行国库处" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDoI=" />
                    <row ID="3" FItemID="133" FNumber="102" FName="中国工商银行" FFullName="中国工商银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDoY=" />
                    <row ID="4" FItemID="134" FNumber="103" FName="中国农业银行" FFullName="中国农业银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDoo=" />
                    <row ID="5" FItemID="135" FNumber="104" FName="中国银行" FFullName="中国银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDo4=" />
                    <row ID="6" FItemID="136" FNumber="105" FName="中国建设银行" FFullName="中国建设银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDpI=" />
                    <row ID="7" FItemID="137" FNumber="201" FName="国家开发银行" FFullName="国家开发银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDpY=" />
                    <row ID="8" FItemID="138" FNumber="202" FName="中国进出口银行" FFullName="中国进出口银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDpo=" />
                    <row ID="9" FItemID="139" FNumber="203" FName="中国农业发展银行" FFullName="中国农业发展银行" FDeleted="0" FArea="1" FIsBank="1" FModifyTime="AAAAAAAFDp4=" />'

    WHILE @XML_CACHE.exist('/row[@FLAG=0]')=1
    BEGIN
        SELECT @IDA=Y.value('@ID','INT') FROM @XML_CACHE.nodes('/row') X(Y) WHERE Y.value('@FLAG','BIT')=0
        SELECT @IDA
        SET @XML_CACHE.modify('replace value of (/row/@FDeleted)[5] with sql:variable("@IDA")')     ----可以执行
        SET @XML_CACHE.modify('replace value of (/row/@FDeleted)[7] with 7')                        ----可以执行
        SET @XML_CACHE.modify('replace value of (/row/@FDeleted)[sql:variable("@IDA")] with 1')     ----报错
        BREAK
    END

    SELECT @XML_CACHE

在程序中使用xml.modify.update更新如何动态调整定位指针有没有朋友指点一下

  • 写回答

1条回答 默认 最新

  • 按时烧香 2023-12-19 12:28
    关注

    问题解决:
    1、 这是一个理解误差,循环跑起来内部,单条记录只要是唯一的,那么定位指针永远都是[1],所以做以下调整即可:

    SET @XML_CACHE.modify('replace value of (/row/@FLAG[../@ID=sql:variable("@IDA")])[1] with 7')
    

    2、 更新属性值需要跳层

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 创建了问题 12月18日