USP_MKTSOURCECODEMAP_POPULATE
Populates the source code map table for a given marketing effort .
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@SEGMENTATIONSEGMENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSOURCECODEMAP_POPULATE]
(
@SEGMENTATIONID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@SEGMENTATIONSEGMENTID uniqueidentifier = null
)
as
set nocount on;
declare @SOURCECODEID uniqueidentifier;
declare @SOURCECODEISHISTORICAL bit;
declare @HASCONSOLIDATEDLISTSEGMENTS bit;
declare @SQL nvarchar(max);
declare @CURRENTDATE datetime;
begin try
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
select
@SOURCECODEID = [MKTSEGMENTATION].[SOURCECODEID],
@SOURCECODEISHISTORICAL = isnull([MKTSOURCECODE].[ISHISTORICAL], 0)
from dbo.[MKTSEGMENTATION]
left outer join dbo.[MKTSOURCECODE] on [MKTSOURCECODE].[ID] = [MKTSEGMENTATION].[SOURCECODEID]
where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;
if @SOURCECODEID is not null and @SOURCECODEISHISTORICAL = 0
begin
if @SEGMENTATIONSEGMENTID is not null
begin
declare @MKTSOURCECODEMAPID uniqueidentifier;
select
@MKTSOURCECODEMAPID = [MKTSOURCECODEMAP].[ID],
@HASCONSOLIDATEDLISTSEGMENTS = dbo.[UFN_MKTSEGMENT_ISCONSOLIDATEDVIEWSEGMENT]([MKTSEGMENTATIONSEGMENT].[SEGMENTID])
from dbo.[MKTSOURCECODEMAP]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID]
where [MKTSOURCECODEMAP].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID] = @SEGMENTATIONSEGMENTID;
exec dbo.[USP_MKTSOURCECODEMAP_DELETEBYID_WITHCHANGEAGENTID] @MKTSOURCECODEMAPID, @CHANGEAGENTID;
end
else
--Check if the mailing contains consolidated list segments so that we can maybe shortcut some processing...
set @HASCONSOLIDATEDLISTSEGMENTS = dbo.[UFN_MKTSEGMENTATION_HASCONSOLIDATEDVIEWSEGMENTS](@SEGMENTATIONID);
/* Insert the source code mapping information */
set @SQL = 'insert into dbo.[MKTSOURCECODEMAP] (' + char(13) +
' [ID],' + char(13) +
' [SEGMENTATIONID],' + char(13) +
' [SEGMENTATIONSEGMENTID],' + char(13) +
' [SEGMENTATIONTESTSEGMENTID],' + char(13) +
' [LISTID],' + char(13) +
' [DONORQUERYVIEWCATALOGID],' + char(13) +
' [SOURCECODEID],' + char(13) +
' [SOURCECODE],' + char(13) +
' [ADDEDBYID],' + char(13) +
' [CHANGEDBYID],' + char(13) +
' [DATEADDED],' + char(13) +
' [DATECHANGED]' + char(13) +
')' + char(13) +
'select' + char(13) +
' newid() as [ID],' + char(13) +
' @SEGMENTATIONID as [SEGMENTATIONID],' + char(13) +
' isnull([DONORS].[SEGMENTID], [SEGMENTS].[SEGMENTID]) as [SEGMENTID],' + char(13) +
' isnull([DONORS].[TESTSEGMENTID], [SEGMENTS].[TESTSEGMENTID]) as [TESTSEGMENTID],' + char(13) +
' ' + (case when @HASCONSOLIDATEDLISTSEGMENTS = 1 then 'isnull([LISTSEGMENT].[LISTID], [CONSOLSEGMENT].[LISTID]) as [LISTID]' else '[LISTSEGMENT].[LISTID]' end) + ',' + char(13) +
' [MKTSEGMENT].[QUERYVIEWCATALOGID] as [RECORDSOURCEID],' + char(13) +
' [MKTSEGMENTATION].[SOURCECODEID],' + char(13) +
' (case when [DONORS].[SEGMENTID] is not null then' + char(13) +
' --This will give us the exact source code even for consolidated list segments...' + char(13) +
' [DONORS].[SOURCECODE]' + char(13) +
' else' + char(13) +
' --This is only for vendor managed lists which do not get added to the data table...' + char(13) +
' --Do not call this for consolidated list segments because it will return asterisks in the source code for the list part.' + char(13) +
' dbo.[UFN_MKTSOURCECODE_BUILDCODE](isnull([SEGMENTS].[TESTSEGMENTID], [SEGMENTS].[SEGMENTID]), default, default)' + char(13) +
' end) as [SOURCECODE],' + char(13) +
' @CHANGEAGENTID as [ADDEDBYID],' + char(13) +
' @CHANGEAGENTID as [CHANGEDBYID],' + char(13) +
' @CURRENTDATE as [DATEADDED],' + char(13) +
' @CURRENTDATE as [DATECHANGED]' + char(13) +
'from dbo.[UFN_MKTSEGMENTATIONACTIVATE_GETSEGMENTS](@SEGMENTATIONID) as [SEGMENTS]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [SEGMENTS].[SEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]' + char(13) +
'left join dbo.[' + dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID) + '] as [DONORS] on [DONORS].[SEGMENTID] = [SEGMENTS].[SEGMENTID] and (([DONORS].[TESTSEGMENTID] is null and [SEGMENTS].[TESTSEGMENTID] is null) or ([DONORS].[TESTSEGMENTID] = [SEGMENTS].[TESTSEGMENTID]))' + char(13) +
'left join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]' + char(13) +
'left join dbo.[MKTSEGMENTLIST] as [LISTSEGMENT] on [MKTSEGMENT].[SEGMENTTYPECODE] = 2 and [LISTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID]' + char(13) +
(case when @HASCONSOLIDATEDLISTSEGMENTS = 1 then 'left join dbo.[MKTSEGMENTLIST] as [CONSOLSEGMENT] on [MKTSEGMENT].[SEGMENTTYPECODE] = 1 and [CONSOLSEGMENT].[QUERYVIEWCATALOGID] = [DONORS].[DONORQUERYVIEWCATALOGID]' + char(13) else '' end) +
'where [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 0' + char(13);
if @SEGMENTATIONSEGMENTID is not null
set @SQL += 'and [SEGMENTS].[SEGMENTID] = @SEGMENTATIONSEGMENTID' + char(13);
set @SQL += 'group by [SEGMENTS].[SEGMENTID], [SEGMENTS].[TESTSEGMENTID], [MKTSEGMENT].[QUERYVIEWCATALOGID], [DONORS].[SEGMENTID], [DONORS].[TESTSEGMENTID], [LISTSEGMENT].[LISTID], ' + (case when @HASCONSOLIDATEDLISTSEGMENTS = 1 then '[CONSOLSEGMENT].[LISTID], ' else '' end) + '[MKTSEGMENTATION].[SOURCECODEID], [DONORS].[SOURCECODE];';
if @SEGMENTATIONSEGMENTID is not null
exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime, @SEGMENTATIONSEGMENTID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE, @SEGMENTATIONSEGMENTID = @SEGMENTATIONSEGMENTID;
else
exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @CHANGEAGENTID uniqueidentifier, @CURRENTDATE datetime', @SEGMENTATIONID = @SEGMENTATIONID, @CHANGEAGENTID = @CHANGEAGENTID, @CURRENTDATE = @CURRENTDATE;
/* Insert the source code part map information */
insert into dbo.[MKTSOURCECODEMAPPART] (
[ID],
[MKTSOURCECODEMAPID],
[MKTSOURCECODEPARTDEFINITIONID],
[CODE],
[MKTSOURCECODEPARTDEFINITIONVALUESID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid() as [ID],
[MKTSOURCECODEMAP].[ID] as [MKTSOURCECODEMAPID],
[MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID],
(case when [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 6 then
--For list parts only...
isnull([MKTSOURCECODEPART].[CODE], [MKTRECORDSOURCE].[CODE])
else
--For all other parts...
dbo.[UFN_MKTSOURCECODE_BUILDCODE](isnull([MKTSOURCECODEMAP].[SEGMENTATIONTESTSEGMENTID], [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID]), default, [MKTSOURCECODEITEM].[ID])
end) as [CODE],
case [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE]
when 0 then [MKTSEGMENTATION].[PARTDEFINITIONVALUESID]
when 1 then isnull([MKTSEGMENTATIONTESTSEGMENT].[PARTDEFINITIONVALUESID], [MKTSEGMENTATIONSEGMENT].[PARTDEFINITIONVALUESID])
when 2 then isnull(TP.[PARTDEFINITIONVALUESID], SP.[PARTDEFINITIONVALUESID])
when 3 then isnull(TP.[CHANNELPARTDEFINITIONVALUESID], SP.[CHANNELPARTDEFINITIONVALUESID])
when 5 then
case
when [MKTSEGMENTATIONTESTSEGMENT].[ID] is null then
case
when exists(select 1 from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONSEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID])
then (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONSEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID])
else (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONSEGMENTID] is null and [SEGMENTATIONTESTSEGMENTID] is null)
end
else
case
when exists(select 1 from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONTESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID])
then (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONTESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID])
else (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONSEGMENTID] is null and [SEGMENTATIONTESTSEGMENTID] is null)
end
end
when 6 then isnull([MKTSOURCECODEPART].[PARTDEFINITIONVALUESID], [MKTRECORDSOURCE].[PARTDEFINITIONVALUESID])
when 7 then isnull([MKTSEGMENTATIONTESTSEGMENT].[PARTDEFINITIONVALUESID], [MKTSEGMENTATIONSEGMENT].[TESTPARTDEFINITIONVALUESID])
end as [MKTSOURCECODEPARTDEFINITIONVALUESID],
@CHANGEAGENTID as [ADDEDBYID],
@CHANGEAGENTID as [CHANGEDBYID],
@CURRENTDATE as [DATEADDED],
@CURRENTDATE as [DATECHANGED]
from dbo.[MKTSOURCECODEMAP]
inner join dbo.[MKTSOURCECODEITEM] on [MKTSOURCECODEITEM].[SOURCECODEID] = [MKTSOURCECODEMAP].[SOURCECODEID]
inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSOURCECODEMAP].[SEGMENTATIONID]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID]
left join dbo.[MKTSEGMENTATIONPACKAGE] SP on SP.[SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and SP.[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [MKTSOURCECODEMAP].[SEGMENTATIONTESTSEGMENTID]
left join dbo.[MKTSEGMENTATIONPACKAGE] TP on TP.[SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and TP.[PACKAGEID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
left join dbo.[MKTSOURCECODEPART] on [MKTSOURCECODEPART].[SEGMENTATIONID] = [MKTSOURCECODEMAP].[SEGMENTATIONID] and [MKTSOURCECODEPART].[SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [MKTSOURCECODEPART].[LISTID] = [MKTSOURCECODEMAP].[LISTID]
left join dbo.[MKTRECORDSOURCE] on [MKTRECORDSOURCE].[ID] = [MKTSOURCECODEMAP].[DONORQUERYVIEWCATALOGID]
where [MKTSOURCECODEMAP].[SEGMENTATIONID] = @SEGMENTATIONID
and (@SEGMENTATIONSEGMENTID is null or [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID] = @SEGMENTATIONSEGMENTID);
end
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;