I want to update a XML variable in SQL Server 2012.
Sample XML:
<ArrayOfFieldInfo>
<FieldInfo>
<Name>abc</Name>
<FriendlyName>friend2</FriendlyName>
<Description>Custom added field</Description>
<FieldGroupName>Custom Fields</FieldGroupName>
</FieldInfo>
<FieldInfo>
<Name>efg</Name>
<FriendlyName>friend1</FriendlyName>
<Description>Custom added field</Description>
<FieldGroupName>Custom Fields</FieldGroupName>
</FieldInfo>
</ArrayOfFieldInfo>
I want to update node <FriendlyName> with new value 'friend3' where <Name> node value is 'efg'.
I have tried following code but it doesn't work.
DECLARE @xmlTable table (xmlfield xml)
INSERT INTO @xmlTable (xmlfield)
VALUES (
'<ArrayOfFieldInfo>
<FieldInfo>
<Name>abc</Name>
<FriendlyName>friend2</FriendlyName>
<Description>Custom added field</Description>
<FieldGroupName>Custom Fields</FieldGroupName>
</FieldInfo>
<FieldInfo>
<Name>efg</Name>
<FriendlyName>friend1</FriendlyName>
<Description>Custom added field</Description>
<FieldGroupName>Custom Fields</FieldGroupName>
</FieldInfo>
</ArrayOfFieldInfo>'
)
UPDATE @xmlTable
SET xmlfield.modify('replace value of (/ArrayOfFieldInfo/FieldInfo/FriendlyName/text())[1] with "friend3"')
WHERE xmlfield.value('(/ArrayOfFieldInfo/FieldInfo/Name/text())[1]', 'nvarchar(50)') = 'efg'