如何使用XML.modify’替换值’与WHERE子句
发布时间:2020-12-16 22:52:50 所属栏目:百科 来源:网络整理
导读:我有一个 XML列,其中包含存储在 XML中的外键ID值.我需要能够在ID值改变时更新XML(例如,将“26”的所有实例更改为“999”). 从我的读数here我试图调整代码,但它实际上没有更新: DECLARE @tmp TABLE (xmlCol xml);INSERT INTO @tmp (xmlCol) SELECT ('searchg
我有一个
XML列,其中包含存储在
XML中的外键ID值.我需要能够在ID值改变时更新XML(例如,将“26”的所有实例更改为“999”).
从我的读数here我试图调整代码,但它实际上没有更新: 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; 请达到这个目的的正确修改逻辑是什么? 解决方法
您指定的XPath将值与元素g的文本匹配,并且适用于像< g> 26< / g>这样的元素,在您的情况下,您必须更改XPath以匹配元素的id属性.假设组在/ search / groups中是唯一的,您可以尝试以下方法:
UPDATE @tmp SET xmlCol.modify('replace value of (/search/groups/g[@id=sql:variable("@oldId")]/@id)[1] with (sql:variable("@newId"))'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |