Как заменить значение атрибута узла XML в SQL server
Я хочу обновить значение атрибута xml-узла новым значением. исходя из следующего условия
Условие 1: Если новое значение уже существует в строке xml, то удалите старый узел значения из xml
Условие 2: Если новое значение не существует в строке xml, то замените старое значение новым.
Что я уже пробовал:
DECLARE @Employee TABLE(empXML XML); INSERT INTO @Employee VALUES('<ROOT><Employee Id="100"/><Employee Id="101"/><Employee Id="102"/></ROOT>') INSERT INTO @Employee VALUES('<ROOT><Employee Id="100"/><Employee Id="106"/><Employee Id="107"/></ROOT>') INSERT INTO @Employee VALUES('<ROOT><Employee Id="100"/><Employee Id="102"/><Employee Id="109"/></ROOT>') INSERT INTO @Employee VALUES('<ROOT><Employee Id="111"/><Employee Id="107"/><Employee Id="101"/></ROOT>') SELECT * FROM @Employee DECLARE @OldEmployeeId INT=101, @NewEmployeeId INT=100; IF EXISTS(SELECT 1 FROM @Employee WHERE empXML.exist('ROOT/Employee[@Id=sql:variable("@NewEmployeeId")]') = 1) BEGIN UPDATE @Employee SET empXML.modify('delete ROOT/Employee[@Id eq sql:variable("@OldEmployeeId")]') END ELSE BEGIN UPDATE @Employee SET empXML.modify('replace value of (ROOT/Employee[@Id eq sql:variable("@OldEmployeeId")]/@Id)[1] with sql:variable("@NewEmployeeId")') WHERE empXML.exist('ROOT/Employee[@Id eq sql:variable("@OldEmployeeId")]') = 1; END SELECT * FROM @Employee But it is not working as expected.Please help me.