是否可以使用SQL2012中单独的XML列中的另一个节点的值更新XML列的节点

时间:2017-06-28 18:33:04

标签: sql-server xml xquery

我有两个表:tagsdevices,每个表都有XML列:tag_configdevice_config。我试图根据device_config中节点的值更新tag_config XML中一个节点的值。

我使用以下语句根据整数列更新device_config中的节点:

update d
set device_config.modify('replace value of (//plc_int_device_status/text())[1] with sql:column("t.uid")')
from devices d join tags t on 
d.device_name = t.name

是否可以使用sql:column("t.uid")列的查询()替换tag_config以获取特定节点的值?

1 个答案:

答案 0 :(得分:0)

您可以先使用可更新的CTE 提取所需的值,然后更新其他列:

DECLARE @mockup TABLE(ID INT IDENTITY, XML1 XML, XML2 XML);
INSERT INTO @mockup VALUES
 ('<root><SomeElement test="x">InnerText</SomeElement></root>'
 ,'<root><OtherElement test="y">OtherText</OtherElement></root>'
 )
,('<root><SomeElement test="a">abc</SomeElement></root>'
 ,'<root><OtherElement test="b">xyz</OtherElement></root>'
 );

SELECT XML1 FROM @mockup;

WITH updateableCTE AS
(
    SELECT XML1
          ,XML2.value('(/root/OtherElement/text())[1]','nvarchar(max)') AS NewText
    FROM @mockup 
)
UPDATE updateableCTE
SET XML1.modify('replace value of (/root/SomeElement/text())[1] with sql:column("NewText")');

SELECT XML1 FROM @mockup;