在Modify()方法中提供xml元素值

时间:2018-10-18 21:26:34

标签: sql-server xml tsql sql-server-2016

因此,我知道如何在Modify()方法中替换xml元素的元素值。这是例子

TSQL Replace value in XML String

我的问题有点不同。以上面的链接为例...

UPDATE dbo.TFS_Feedback_New
    SET Details.modify('
        replace value of (/optional/educational/text())[1]
        with sql:variable("@updatedEducation")')
    WHERE feedbackID = @FBID

我想做的是为“教育”提供价值。换句话说,我想做这样的事情

UPDATE dbo.TFS_Feedback_New
    SET Details.modify('
        replace value of (/optional/sql:variable("@name")/text())[1]
        with sql:variable("@value")')
    WHERE feedbackID = @FBID

由于sql:variable("@name")

,我收到以下错误消息

不支持XQuery语法'/ function()'。

如何将要更新的元素的名称及其值传递给我的storedproc,并让它更新xml列?

1 个答案:

答案 0 :(得分:1)

不允许将变量用作XPath的一部分,但可以使用谓词:

DECLARE @xml XML=
N'<root>
    <optional>
        <educational>SomeText</educational>
        <someOther>blah</someOther>
    </optional>
  </root>';

-您知道的直接方法:

SET @xml.modify('replace value of (/root/optional/educational/text())[1] with "yeah!"');

SELECT @xml;

-现在,我们使用变量来查找<optional>下的第一个节点,其名称如下:

DECLARE @ElementName VARCHAR(100)='educational';

SET @xml.modify('replace value of (/root/optional/*[local-name()=sql:variable("@ElementName")]/text())[1] with "yeah again!"');

SELECT @xml;

尝试一下...