USP_GETSPLITPROCESSORMAPPINGXML
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@MAPPINGRULES | xml | IN | |
@TRANSACTIONTYPEFILTERVALUE | varchar(100) | IN | |
@ORIGINALTEMPLATENAME | varchar(100) | IN | |
@NEWTEMPLATENAME | varchar(100) | IN | |
@ORIGINALOWNERNAMEOPENINGTAG | varchar(100) | IN | |
@ORIGINALOWNERNAMECLOSINGTAG | varchar(100) | IN | |
@NEWOWNERNAMEOPENINGTAG | varchar(100) | IN | |
@NEWOWNERNAMECLOSINGTAG | varchar(100) | IN | |
@NEWMAPPINGFINALXML | xml | INOUT |
Definition
Copy
create procedure dbo.USP_GETSPLITPROCESSORMAPPINGXML
(
@MAPPINGRULES xml,
@TRANSACTIONTYPEFILTERVALUE varchar(100),
@ORIGINALTEMPLATENAME varchar(100),
@NEWTEMPLATENAME varchar(100),
@ORIGINALOWNERNAMEOPENINGTAG varchar(100),
@ORIGINALOWNERNAMECLOSINGTAG varchar(100),
@NEWOWNERNAMEOPENINGTAG varchar(100),
@NEWOWNERNAMECLOSINGTAG varchar(100),
@NEWMAPPINGFINALXML xml output
)
as
begin
declare @BATCHSEPARATIONFILTEREDXML xml
declare @NEWMAPPINGRULE nvarchar(MAX)
declare @COUNT int
declare @MAXCOUNT int
declare @PARENTRULEID uniqueidentifier
select @BATCHSEPARATIONFILTEREDXML = @MAPPINGRULES.query('/MAPPINGRULES/ITEM[.//*[local-name() = sql:variable("@TRANSACTIONTYPEFILTERVALUE")]/text()="True"]');
set @NEWMAPPINGRULE = N'<?xml version="1.0" encoding="utf-16"?><MAPPINGRULES>' + convert(nvarchar(max), @BATCHSEPARATIONFILTEREDXML) + '</MAPPINGRULES>'
set @NEWMAPPINGFINALXML = convert(xml, @NEWMAPPINGRULE)
select @MAXCOUNT = count(1) from @NEWMAPPINGFINALXML.nodes('/MAPPINGRULES/ITEM') T(c)
set @COUNT = 1
while @COUNT <= @MAXCOUNT
begin
set @PARENTRULEID = @NEWMAPPINGFINALXML.value('(/MAPPINGRULES/ITEM/ID)[sql:variable("@Count")][1]', 'uniqueidentifier')
--Replace template value
set @NEWMAPPINGFINALXML.modify('replace value of (/MAPPINGRULES/ITEM//*[local-name() = sql:variable("@ORIGINALTEMPLATENAME")]/text())[sql:variable("@Count")][1]
with (/MAPPINGRULES/ITEM//*[local-name() = sql:variable("@NEWTEMPLATENAME")]/text())[sql:variable("@Count")][1]')
--Create new node parent rule id and add parent rule id i.e id to that
declare @PARENTRULEIDXMLTAG xml = '<PARENTRULEID>' + convert(nvarchar(50), @PARENTRULEID) +'</PARENTRULEID>'
set @NEWMAPPINGFINALXML.modify('insert sql:variable("@PARENTRULEIDXMLTAG") as first into (/MAPPINGRULES/ITEM)[sql:variable("@Count")][1]')
--Replace id column value with new child ruleid
declare @RULEID uniqueidentifier
set @RULEID = newid()
set @NEWMAPPINGFINALXML.modify('replace value of (/MAPPINGRULES/ITEM/ID/text())[sql:variable("@Count")][1]
with sql:variable("@RULEID")[1]')
set @COUNT=@COUNT + 1
end
--Delete OWNERIDS tag
declare @ORIGINALOWNERNAME varchar(100)
set @ORIGINALOWNERNAME = substring(@ORIGINALOWNERNAMEOPENINGTAG, 2, len(@ORIGINALOWNERNAMEOPENINGTAG) - 2 )
set @NEWMAPPINGFINALXML.modify('delete /MAPPINGRULES/ITEM//*[local-name() = sql:variable("@ORIGINALOWNERNAME")]')
set @NEWMAPPINGFINALXML = replace(replace(cast(@NEWMAPPINGFINALXML as nvarchar(max)),
@NEWOWNERNAMEOPENINGTAG,
@ORIGINALOWNERNAMEOPENINGTAG),
@NEWOWNERNAMECLOSINGTAG,
@ORIGINALOWNERNAMECLOSINGTAG)
select @NEWMAPPINGFINALXML
end