我有一个
XML列,其中包含存储在
XML中的外键ID值.我需要能够在ID值改变时更新XML(例如,将“26”的所有实例更改为“999”).
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;
请达到这个目的的正确修改逻辑是什么?