4

XML 内に格納された外部キー ID 値を含む XML 列があります。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;

これを達成するための正しいmodifyロジックは何ですか?

4

1 に答える 1