Укажите значение элемента xml в методе modify () - PullRequest
0 голосов
/ 19 октября 2018

Итак, я знаю, как заменить значение элемента для элемента xml в методе modify ().Вот пример

TSQL Заменить значение в строке XML

Моя проблема немного другая.Взяв пример из приведенной выше ссылки ...

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 ()' не поддерживается.

Как передать как имя элемента, подлежащего обновлению, так и его значение в мой хранящийся процесс и обновить его в столбце xml?

1 Ответ

0 голосов
/ 19 октября 2018

Вы не можете использовать переменные как часть 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;

Попробуйте это ...

...