My SQL table column having xml data like below
I am trying to find element based on specific tag value ( age ). But, my xml values having leading spaces. so, Its failing on the condition. Kindly guide me handle this.
Example:
declare @age2 varchar(40)='23'
declare @ageNew2 varchar(40)='43'
declare @xmldata xml='<Root>
<Identification Name="John" Family="Brown"><Age>40</Age><name>xxx</name></Identification>
<Identification Name="Smith" Family="Johnson"><Age>35</Age><name>xxx</name></Identification>
<Identification Name="Jessy" Family="Albert"><Age>60</Age><name>xxx</name></Identification>
<Identification Name="Mike" Family="Brown"><Age>23</Age><name>xxx</name></Identification>
<Identification Name="Sarah" Family="Johnson"><Age>40</Age><name>xxx</name></Identification>
<Identification Name="Jessy" Family="Albert"><Age>40</Age><name>xxx</name></Identification>
<Identification Name="Mike" Family="Brown"><Age>23 </Age><name>xxx</name></Identification>
<Identification Name="Sarah" Family="Johnson"><Age>45</Age><name>xxx</name></Identification>
</Root>'
declare @dynamicData varchar(max)
set @dynamicData=' declare @xml varchar(max) ='''+Convert(varchar(max),@xmldata)+''' '
set @dynamicData +=' declare @xmld xml=convert(xml,@xml) '
set @dynamicData +=' declare @age varchar(55) ='''+@age2+''''
set @dynamicData +=' declare @ageNew varchar(55) ='''+@ageNew2+''''
DECLARE @nodeCount int
DECLARE @i int
SET @i = 0
SELECT @nodeCount = @xmldata.value('count(/Root/Identification/Age)','int')
WHILE (@i < @nodeCount)
BEGIN
set @dynamicData+=' set @xmld.modify(''replace value of (/Root/Identification[Age=sql:variable("@age")]/name/text())['+convert(varchar(10),@i)+'] with "'+@ageNew2+'"'') '
SET @i = @i + 1
END
set @dynamicData+=' select convert(xml,@xmld) '
exec(@dynamicData)
here, i am trying to update age 23 to 43. So, as per my expectation. it should replace two places. But, its replacing first one alone. Because, second one having space. so, Please guide me. Thanks