A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
I have update text in xml different way. full code.
DECLARE @xml xml
DECLARE @li varchar(max) ='Consensus Model'
DECLARE *anonymous user*XfundCode varchar(max) ='TRIN'
DECLARE @newXfundCode varchar(max) ='TEST105'
DECLARE @NewGroupKey NVARCHAR(max)
CREATE TABLE #tmpData (id INT, xmldata xml)
INSERT INTO #tmpData (id, xmldata)
VALUES (1,N'<?xml version="1.0" encoding="utf-16"?>
<PWR_ViewAll>
<dgvViewAll_Vertical>
<Section_x0020_>ZB-P1</Section_x0020_>
<LineItem>B. Riley FBR Inc.</LineItem>
<Revise_x0020_Date>08-21-2020</Revise_x0020_Date>
<GroupKey>Consensus Model~Total Revenue~TRIN~NBM~~1~ZB-P1</GroupKey>
</dgvViewAll_Vertical>
<dgvViewAll_Vertical>
<Section_x0020_>CL</Section_x0020_>
<LineItem>Deutsche Bank</LineItem>
<Revise_x0020_Date>02-28-2020</Revise_x0020_Date>
<GroupKey>Segment Detail~Total Revenue~RD_100~NBM~~1~CL</GroupKey>
</dgvViewAll_Vertical>
</PWR_ViewAll>')
SELECT @xml=xmldata from #tmpData where ID=1
DECLARE @r INT =1
DECLARE @Cntr INT = 0
CREATE TABLE #TempData1
(
ID INT Identity,
GroupKey NVARCHAR(MAX)
)
DECLARE
*anonymous user*GroupKeyvalue nvarchar(100),
@newGroupKeyValue nvarchar(100),
@GrpKey nvarchar(MAX);
INSERT INTO #TempData1
SELECT col.value('(GroupKey/text())[1]', 'VARCHAR(MAX)')
FROM @xml.nodes('/PWR_ViewAll/dgvViewAll_Vertical') AS tab (col)
WHERE CHARINDEX(@li, col.value('(GroupKey/text())[1]', 'VARCHAR(MAX)'))>0
SELECT @Cntr = MAX(ID) FROM #TempData1
While @r<=@Cntr
BEGIN
SELECT @GrpKey=GroupKey FROM #TempData1 WHERE ID=@r
IF CHARINDEX(@li,@GrpKey) > 0 AND CHARINDEX(*anonymous user*XfundCode,@GrpKey) > 0
BEGIN
SET *anonymous user*GroupKeyValue=@GrpKey
SELECT * INTO #tmpSingleRec FROM
(SELECT ID,[DATA] FROM SplitStringToTable(@GrpKey,'~')) a
IF EXISTS(SELECT count(*) FROM #tmpSingleRec)
BEGIN
UPDATE #tmpSingleRec SET DATA=@newXfundCode WHERE ID=3
SELECT @NewGroupKey=COALESCE(@NewGroupKey + '~', '')+[DATA] FROM #tmpSingleRec
set @xml.modify('
replace value of (/PWR_ViewAll/dgvViewAll_Vertical/GroupKey[.=sql:variable("*anonymous user*GroupKeyValue")]/text())[1]
with sql:variable("@NewGroupKey")
'
);
END
END
SET @r=@r+1
END
UPDATE #tmpData SET xmldata=@xml WHERE ID=1
SELECT * FROM #tmpData
IF OBJECT_ID('TempDB..#TempData1') IS NOT NULL
BEGIN
drop table #TempData1
END
IF OBJECT_ID('TempDB..#tmpData') IS NOT NULL
BEGIN
drop table #tmpData
END
IF OBJECT_ID('TempDB..#tmpSingleRec') IS NOT NULL
BEGIN
drop table #tmpSingleRec
END