首页 > 解决方案 > XML 修改属性值

问题描述

我正在研究 XML 结构,但无法解决问题;

SET @V_XML.modify('replace value of (/Table/Header/Column/@readonly)[1] with "False" ')

这是有效的,但 '[1]' 是我的列号,我想让它成为参数。

SET @V_XML.modify('replace value of (/Table/Header/Column/@readonly)[sql:variable("@MYCOLUMNNUM")] with "False" ')

这让我失望了

请帮忙,谢谢

标签: sql-serverxmltsql

解决方案


您没有共享您的 XML,所以我自己设计了它。

如果您需要通过其序号更改特定列中的属性值,则需要在Column元素之后使用谓词。

SQL

-- DDL and sample data population, start
DECLARE @V_XML XML = 
(N'<Table>
    <Header>
        <Column readonly="True"></Column>
        <Column readonly="True"></Column>
        <Column readonly="True"></Column>
    </Header>
</Table>');
-- DDL and sample data population, end

DECLARE @MYCOLUMNNUM INT = 3;

-- before
SELECT @V_XML;

SET @V_XML.modify('replace value of (/Table/Header/Column[sql:variable("@MYCOLUMNNUM")]/@readonly)[1] with "False"');

-- after
SELECT @V_XML;

推荐阅读