首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用WHERE子句使用XML.modify‘替换值’

如何用WHERE子句使用XML.modify‘替换值’
EN

Stack Overflow用户
提问于 2015-03-20 09:01:15
回答 1查看 8.9K关注 0票数 4

我有一个XML列,其中包含在XML中存储的外键ID值。当ID值更改时,我需要能够更新XML (例如,将"26“的所有实例更改为"999")。

从我的阅读资料这里中,我试着修改代码,但它实际上并不是在更新:

代码语言:javascript
复制
DECLARE @tmp TABLE (xmlCol xml);

INSERT INTO @tmp (xmlCol) SELECT 
('<search><groups><g id="25" /><g id="26" /></groups></search>') UNION ALL SELECT
('<search><groups><g id="2" /><g id="9" /></groups></search>') UNION ALL SELECT
('<search><groups><g id="7" /><g id="12" /><g id="26" /></groups></search>');

SELECT * FROM @tmp;

DECLARE @oldId int = 26;
DECLARE @newId int = 999;

UPDATE @tmp SET xmlCol.modify('replace value of 
    (/search/groups/g/text()[.=(sql:variable("@oldId"))])[1]
with 
    (sql:variable("@newId"))');

SELECT * FROM @tmp;

要实现这一点,正确的modify逻辑是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 11:53:01

您指定的XPath将值与元素g的文本相匹配,并适用于像<g>26</g>这样的元素,在您的示例中,您必须更改XPath以匹配元素的id属性。假设组在/search/groups中是唯一的,您可以尝试如下:

代码语言:javascript
复制
UPDATE @tmp
SET xmlCol.modify('replace value of 
    (/search/groups/g[@id=sql:variable("@oldId")]/@id)[1]
with 
    (sql:variable("@newId"))');
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29162811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档