USP_DATAFORMTEMPLATE_EDIT_FAFNFGCampaignLevelHierarchy
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@LEVELHIERARCHY | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_FAFNFGCampaignLevelHierarchy
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@LEVELHIERARCHY xml
)
as
begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
begin try
declare @TempTbl table (
ID uniqueidentifier,
PARENTID uniqueidentifier,
NAME nvarchar(100),
SEQUENCE int);
insert into
@TempTbl
select
T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
T.c.value('(PARENTID)[1]','uniqueidentifier') AS 'PARENTID',
T.c.value('(NAME)[1]','nvarchar(100)') AS 'NAME',
T.c.value('(SEQUENCE)[1]','int') AS 'SEQUENCE'
from
@LEVELHIERARCHY.nodes('/LEVELHIERARCHY/ITEM') T(c);
-- Update the hierarchyids using using a recursive cte to build up paths (i.e. '/2/1/3')
with LEVEL_SEQUENCE_CTE as (
select
ID,
PARENTID,
SEQUENCE
from
@TempTbl
),
LEVEL_PATHS_CTE as (
select
ID,
PARENTID,
(select FAFNFGCAMPAIGNLEVEL.HIERARCHYPATH from dbo.FAFNFGCAMPAIGNLEVEL where FAFNFGCAMPAIGNLEVEL.NFGCAMPAIGNID = @ID and FAFNFGCAMPAIGNLEVEL.HIERARCHYPATH.GetLevel() = 1) as HIERARCHYPATH
from
@TempTbl
where
PARENTID is null
union all
select
LEVEL_SEQUENCE_CTE.ID,
LEVEL_SEQUENCE_CTE.PARENTID,
CAST(HIERARCHYPATH.ToString() + cast(LEVEL_SEQUENCE_CTE.SEQUENCE as varchar(20)) + '/' AS hierarchyid)
from
LEVEL_PATHS_CTE
inner join LEVEL_SEQUENCE_CTE on LEVEL_SEQUENCE_CTE.PARENTID = LEVEL_PATHS_CTE.ID
)update
dbo.FAFNFGCAMPAIGNLEVEL
set
FAFNFGCAMPAIGNLEVEL.HIERARCHYPATH = LEVEL_PATHS_CTE.HIERARCHYPATH,
FAFNFGCAMPAIGNLEVEL.CHANGEDBYID = @CHANGEAGENTID,
FAFNFGCAMPAIGNLEVEL.DATECHANGED = @CURRENTDATE
from
dbo.FAFNFGCAMPAIGNLEVEL
inner join LEVEL_PATHS_CTE on FAFNFGCAMPAIGNLEVEL.ID = LEVEL_PATHS_CTE.ID
where FAFNFGCAMPAIGNLEVEL.NFGCAMPAIGNID = @ID and FAFNFGCAMPAIGNLEVEL.HIERARCHYPATH <> LEVEL_PATHS_CTE.HIERARCHYPATH;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end