Я пытаюсь обновить один столбец XML значениями из другого столбца XML той же таблицы, например:
source:
|----|--------------------|----------------------|
|F_ID|F_DATA |F_RESULT |
|----|--------------------|----------------------|
|1 |<Email guid="qwe" />|<Request guid="" /> |
|----|--------------------|----------------------|
result:
|----|--------------------|----------------------|
|F_ID|F_DATA |F_RESULT |
|----|--------------------|----------------------|
|1 |<Email guid="qwe" />|<Request guid="qwe" />|
|----|--------------------|----------------------|
Таким образом, я пробовал это:
DROP TABLE IF EXISTS #F_DATA;
CREATE TABLE #F_DATA(
F_ID BIGINT IDENTITY PRIMARY KEY,
F_DATA XML,
F_RESULT XML
);
INSERT INTO #F_DATA(F_DATA, F_RESULT)
VALUES('<Email guid="qwe" />', '<Request guid="" />');
UPDATE FU
SET FU.F_RESULT.modify('replace value of (Request/@guid)[1] with {sql:column("F_VALUE")}')
FROM
#F_DATA FU
INNER JOIN
(SELECT
F_ID,
F_DATA.value('(Email/@guid)[1]', 'NVARCHAR(MAX)') 'F_VALUE'
FROM
#F_DATA) V ON FU.F_ID = V.F_ID;
DROP TABLE IF EXISTS #F_DATA;
Ошибка
Неправильный синтаксис рядом с словом "изменить"
выскочил.
Поработав над этим некоторое время, я попробовал это (просто установив для атрибута обычный текст):
UPDATE #F_DATA
SET F_RESULT.modify('replace value of (Request/@guid)[1] with "myguid"');
и все хорошо. НО
UPDATE FU
SET FU.F_RESULT.modify('replace value of (Request/@guid)[1] with "myguid"')
FROM #F_DATA FU;
снова показал ту же ошибку, несмотря на то, что запрос был почти таким же, как и предыдущий.
Похоже, вы можете использовать только те же столбцы или переменные таблицы, что и параметр {sql: *} для .modify (). Есть ли способ сделать это с помощью предложения FROM
?