Обновление типа столбца XML из значения из объединенной таблицы - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно обновить значение в моем столбце XML:

UPDATE HR_XML
SET Salaries.modify('replace value of 
                     (/Salaries/Marketing/Employee[@ID=("2")]/Salary/text())[1] 
                     with ("60000")')

В настоящее время значение 60000 жестко задано, но я собираюсь выполнить внутреннее соединение с другой таблицей.

Как использовать значение из другой таблицы?

UPDATE h
SET Salaries.modify('replace value of 
                     (/Salaries/Marketing/Employee[@ID=("2")]/Salary/text())[1] 
                     with ("60000")')
FROM HR_XML h
INNER JOIN table2 t2 ON h.id = t2.id

Значение из столбца соединенных таблиц t2.NewSalary.

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Это пример, так как у нас нет образца XML или других данных, но их должно быть более чем достаточно, чтобы вы выбрали правильный путь:

USE Sandbox;
GO

CREATE TABLE XMLTable (id int, SomeXML xml);

INSERT INTO XMLTable
VALUES(1,
'<Root>
    <Element>
        <Item>Cheese</Item>
    </Element>
</Root>');

GO
CREATE TABLE ValueTable (id int, SomeValue varchar(20));

INSERT INTO ValueTable
VALUES(1, 'Bacon');

GO

UPDATE X
SET SomeXML.modify('replace value of 
                    (/Root/Element/Item/text())[1] 
                    with sql:column("V.SomeValue")')
FROM XMLTable X
     JOIN ValueTable V ON X.id = V.id;

SELECT *
FROM XMLTable;

GO
DROP TABLE XMLTable;
DROP TABLE ValueTable;

DB <> Fiddle

1 голос
/ 09 октября 2019

Для этого можно использовать функцию sql:column() XQuery:

UPDATE h
SET Salaries.modify('replace value of 
                     (/Salaries/Marketing/Employee[@ID=("2")]/Salary/text())[1] 
                     with sql:column("t2.NewSalary")') -- table.column
FROM HR_XML h
INNER JOIN table2 t2 ON h.id = t2.id

См. подробнее на docs.microsoft.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...