USP_MKTSEGMENTATIONACTIVATE_GETSEGMENTSOURCECODEPARTS
Retrieves a list of source code parts to be validated for the marketing effort segment.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONSEGMENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATIONACTIVATE_GETSEGMENTSOURCECODEPARTS]
(
@SEGMENTATIONSEGMENTID uniqueidentifier
)
as
set nocount on;
declare @SEGMENTATIONID uniqueidentifier;
declare @SOURCECODEID uniqueidentifier;
declare @ISTESTSEGMENT bit;
declare @PACKAGEID uniqueidentifier;
declare @CHANNELCODE tinyint;
declare @SEGMENTID uniqueidentifier;
declare @MARKETINGRECORDTYPE tinyint;
declare @LISTCODE nvarchar(50);
declare @LISTCODEVALUEID uniqueidentifier;
declare @LISTNAME nvarchar(100);
begin try
if object_id('tempdb..#SOURCECODETABLE') is not null
drop table #SOURCECODETABLE;
create table #SOURCECODETABLE (
[ITEMTYPECODE] tinyint not null,
[ITEMTYPE] nvarchar(255) COLLATE database_default not null,
[ITEMNAME] nvarchar(50) COLLATE database_default not null,
[LENGTH] tinyint not null,
[CODE] nvarchar(50) COLLATE database_default,
[NAME] nvarchar(100) COLLATE database_default,
[CODEVALUEID] uniqueidentifier,
[SOURCECODEID] uniqueidentifier
);
create clustered index [IX_TMPSOURCECODETABLE_ITEMTYPECODE] on #SOURCECODETABLE ([ITEMTYPECODE]) with (PAD_INDEX = off, SORT_IN_TEMPDB = on, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off);
create nonclustered index [IX_TMPSOURCECODETABLE_ITEMNAME] on #SOURCECODETABLE ([ITEMNAME]) with (PAD_INDEX = off, SORT_IN_TEMPDB = on, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off);
select
@SEGMENTATIONID = [MKTSEGMENTATION].[ID],
@SOURCECODEID = [MKTSEGMENTATION].[SOURCECODEID],
@ISTESTSEGMENT = 1,
@PACKAGEID = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID],
@CHANNELCODE = [MKTPACKAGE].[CHANNELCODE],
@SEGMENTID = [MKTSEGMENTATIONSEGMENT].[SEGMENTID],
@MARKETINGRECORDTYPE = dbo.[UFN_MKTSEGMENT_GETMARKETINGRECORDTYPE]([MKTSEGMENTATIONSEGMENT].[SEGMENTID])
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @SEGMENTATIONSEGMENTID;
if @SEGMENTATIONID is null
select
@SEGMENTATIONID = [MKTSEGMENTATION].[ID],
@SOURCECODEID = [MKTSEGMENTATION].[SOURCECODEID],
@ISTESTSEGMENT = 0,
@PACKAGEID = [MKTSEGMENTATIONSEGMENT].[PACKAGEID],
@CHANNELCODE = [MKTPACKAGE].[CHANNELCODE],
@SEGMENTID = [MKTSEGMENTATIONSEGMENT].[SEGMENTID],
@MARKETINGRECORDTYPE = dbo.[UFN_MKTSEGMENT_GETMARKETINGRECORDTYPE]([MKTSEGMENTATIONSEGMENT].[SEGMENTID])
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTATIONSEGMENTID;
if @SOURCECODEID is not null
begin
-- get all the parts of the source code for the segment or test segment
insert into #SOURCECODETABLE
select
[MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE],
[MKTSOURCECODEPARTDEFINITION].[ITEMTYPE],
[MKTSOURCECODEPARTDEFINITION].[NAME],
[MKTSOURCECODEITEM].[LENGTH],
(case [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE]
when 0 then -- mailing
(select [CODE] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID)
when 1 then -- segment or test segment
(case when @ISTESTSEGMENT = 1 then
(select isnull([MKTSEGMENTATIONSEGMENT].[CODE], '') from dbo.[MKTSEGMENTATIONSEGMENT] inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @SEGMENTATIONSEGMENTID)
else
(select isnull([CODE], '') from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID)
end)
when 2 then -- package
(select isnull([CODE], '') from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID)
when 3 then -- channel
(select isnull([CHANNELSOURCECODE], '') from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID)
when 5 then -- user defined
null -- updated below
when 6 then /* List */
null -- updated below
when 7 then /* test segment code */
(case when @ISTESTSEGMENT = 1 then (select isnull([TESTSEGMENTCODE], '') from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID) else (select isnull([TESTSEGMENTCODE], '') from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID) end)
end) as [CODE],
(case [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE]
when 0 then -- mailing
(select isnull([NAME], '') from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID)
when 1 then -- segment or test segment
(case when @ISTESTSEGMENT = 1 then
(select isnull([NAME], '') from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID)
else
(dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETNAME](@SEGMENTATIONSEGMENTID))
end)
when 2 then -- package
(select isnull([NAME], '') from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID)
when 3 then -- channel
(select isnull([NAME], '') from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID)
when 4 then -- date
null
when 5 then -- user defined
null
when 6 then -- list
null -- updated below...
when 7 then -- test segment
(case when @ISTESTSEGMENT = 1 then
(select isnull([NAME], '') from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID)
else
(dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETNAME](@SEGMENTATIONSEGMENTID))
end)
end) as [NAME],
(case [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE]
when 0 then -- mailing
(select [PARTDEFINITIONVALUESID] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID)
when 1 then -- segment or test segment
(case when @ISTESTSEGMENT = 1 then
(select [MKTSEGMENTATIONSEGMENT].[PARTDEFINITIONVALUESID] from dbo.[MKTSEGMENTATIONSEGMENT] inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @SEGMENTATIONSEGMENTID)
else
(select [PARTDEFINITIONVALUESID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID)
end)
when 2 then -- package
(select [PARTDEFINITIONVALUESID] from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID)
when 3 then -- channel
(select [CHANNELPARTDEFINITIONVALUESID] from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID)
when 5 then -- user defined
null
when 6 then /* List */
null -- updated below
when 7 then /* test segment code */
(case when @ISTESTSEGMENT = 1 then (select [TESTPARTDEFINITIONVALUESID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID) else (select [TESTPARTDEFINITIONVALUESID] from dbo.[MKTSEGMENTATIONSEGMENT] where [ID] = @SEGMENTATIONSEGMENTID) end)
end) as [CODEVALUEID],
@SOURCECODEID as [SOURCECODEID]
from dbo.[MKTSOURCECODEITEM]
left join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where [MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEID
order by [MKTSOURCECODEITEM].[SEQUENCE];
/* Update user defined source code part codes */
declare @USERDEFINEDPARTNAME nvarchar(100);
declare @USERDEFINEDCODE nvarchar(50);
declare @USERCODEVALUEID uniqueidentifier;
-- Insert user defined parts into table
if @ISTESTSEGMENT = 0
begin
if object_id('tempdb..#SEGMENTATIONSEGMENTPARTS') is not null
drop table #SEGMENTATIONSEGMENTPARTS;
create table #SEGMENTATIONSEGMENTPARTS ([ID] uniqueidentifier);
insert into #SEGMENTATIONSEGMENTPARTS
select [ID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = @SEGMENTATIONID and [SEGMENTATIONSEGMENTID] is null and [SOURCECODEITEMID] in (select [PARTS].[SOURCECODEITEMID] from (select SOURCECODEITEMID, SEGMENTATIONSEGMENTID from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = @SEGMENTATIONID group by [SOURCECODEITEMID], SEGMENTATIONSEGMENTID) [PARTS]group by [PARTS].[SOURCECODEITEMID] having COUNT([PARTS].[SOURCECODEITEMID]) > 1);
create clustered index [IX_TMPSEGMENTATIONSEGMENTPARTS_ID] on #SEGMENTATIONSEGMENTPARTS ([ID]) with (PAD_INDEX = off, SORT_IN_TEMPDB = on, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off);
update #SOURCECODETABLE set
[NAME] = '',
[CODE] = isnull([MKTSOURCECODEPART].[CODE], ''),
[CODEVALUEID] = [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]
from dbo.[MKTSOURCECODEPART]
inner join dbo.[MKTSOURCECODEITEM] on [MKTSOURCECODEITEM].[ID] = [MKTSOURCECODEPART].[SOURCECODEITEMID]
inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where
[MKTSOURCECODEPART].[SEGMENTATIONID] = @SEGMENTATIONID and
/* ID not an overrided user defined part */
[MKTSOURCECODEPART].[ID] not in (select [ID] from #SEGMENTATIONSEGMENTPARTS) and
[ITEMNAME] = [MKTSOURCECODEPARTDEFINITION].[NAME];
if object_id('tempdb..#SEGMENTATIONSEGMENTPARTS') is not null
drop table #SEGMENTATIONSEGMENTPARTS;
end
else
begin
if object_id('tempdb..#SEGMENTATIONTESTSEGMENTPARTS') is not null
drop table #SEGMENTATIONTESTSEGMENTPARTS;
create table #SEGMENTATIONTESTSEGMENTPARTS ([ID] uniqueidentifier);
insert into #SEGMENTATIONTESTSEGMENTPARTS
select [ID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = @SEGMENTATIONID and [SEGMENTATIONTESTSEGMENTID] is null and [SOURCECODEITEMID] in (select [PARTS].[SOURCECODEITEMID] from (select SOURCECODEITEMID, SEGMENTATIONTESTSEGMENTID from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = @SEGMENTATIONID group by [SOURCECODEITEMID], SEGMENTATIONTESTSEGMENTID) [PARTS] group by [PARTS].[SOURCECODEITEMID] having COUNT([PARTS].[SOURCECODEITEMID]) > 1);
create clustered index [IX_TMPSEGMENTATIONTESTSEGMENTPARTS_ID] on #SEGMENTATIONTESTSEGMENTPARTS ([ID]) with (PAD_INDEX = off, SORT_IN_TEMPDB = on, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off);
update #SOURCECODETABLE set
[NAME] = '',
[CODE] = isnull([MKTSOURCECODEPART].[CODE], ''),
[CODEVALUEID] = [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]
from dbo.[MKTSOURCECODEPART]
inner join dbo.[MKTSOURCECODEITEM] on [MKTSOURCECODEITEM].[ID] = [MKTSOURCECODEPART].[SOURCECODEITEMID]
inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where
[MKTSOURCECODEPART].[SEGMENTATIONID] = @SEGMENTATIONID and
/* ID not an overrided user defined part */
[MKTSOURCECODEPART].[ID] not in (select [ID] from #SEGMENTATIONTESTSEGMENTPARTS) and
[ITEMNAME] = [MKTSOURCECODEPARTDEFINITION].[NAME];
if object_id('tempdb..#SEGMENTATIONTESTSEGMENTPARTS') is not null
drop table #SEGMENTATIONTESTSEGMENTPARTS;
end
-- get the list code (or codes for a consolidated list), if we need it...
if exists (select top 1 1
from dbo.[MKTSOURCECODEITEM]
inner join dbo.[MKTSOURCECODEVALIDPARTVALUES] on [MKTSOURCECODEVALIDPARTVALUES].[MKTSOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID]
inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where [MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEID and [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 6)
begin
if @MARKETINGRECORDTYPE = 1 -- record source
begin
-- get the list code from the record source
select
@LISTCODE = [MKTRECORDSOURCE].[CODE],
@LISTNAME = [QUERYVIEWCATALOG].[DISPLAYNAME],
@LISTCODEVALUEID = [MKTRECORDSOURCE].[PARTDEFINITIONVALUESID]
from dbo.[MKTRECORDSOURCE]
inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTRECORDSOURCE].[ID]
where [MKTRECORDSOURCE].[ID] = (select [QUERYVIEWCATALOGID] from dbo.[MKTSEGMENT] where [ID] = @SEGMENTID)
and dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([MKTRECORDSOURCE].[ID]) = 1;
-- update the list code part in our return table
update #SOURCECODETABLE set
[CODE] = isnull(@LISTCODE, ''),
[NAME] = isnull(@LISTNAME, ''),
[CODEVALUEID] = @LISTCODEVALUEID
where [ITEMTYPECODE] = 6;
end
else
begin
-- remove the list part, if it exists
delete #SOURCECODETABLE where [ITEMTYPECODE] = 6;
if @MARKETINGRECORDTYPE = 2 -- list
begin
-- get the list code from the list
select
@LISTCODE = [MKTLIST].[CODE],
@LISTNAME = [MKTLIST].[NAME],
@LISTCODEVALUEID = [MKTLIST].[PARTDEFINITIONVALUESID]
from dbo.[MKTSEGMENT]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
inner join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]
where [MKTSEGMENT].[ID] = @SEGMENTID;
-- insert the list code part into our return table
insert into #SOURCECODETABLE
select
6,
[MKTSOURCECODEPARTDEFINITION].[ITEMTYPE],
[MKTSOURCECODEPARTDEFINITION].[NAME],
[MKTSOURCECODEITEM].[LENGTH],
isnull(@LISTCODE,''),
isnull(@LISTNAME,''),
@LISTCODEVALUEID,
@SOURCECODEID
from dbo.[MKTSOURCECODEITEM]
left join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where [MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEID
and [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 6;
end
else -- consolidated list
begin
-- get all the record source and list codes for the consolidated list (only get codes for people actually in the segment)
declare @SEGMENTVIEWNAME nvarchar(128);
declare @CONSOLIDATEDVIEWNAME nvarchar(128);
declare @SQL nvarchar(max);
if object_id('tempdb..#CONSOLCODESTABLE') is not null
drop table #CONSOLCODESTABLE;
create table #CONSOLCODESTABLE (
[SOURCEQUERYVIEWID] uniqueidentifier not null,
[SOURCELISTCODE] nvarchar(50) COLLATE database_default,
[SOURCELISTNAME] nvarchar(100) COLLATE database_default,
[SOURCELISTCODEVALUEID] uniqueidentifier
);
select
@SEGMENTVIEWNAME = dbo.[UFN_MKTSEGMENT_MAKEVIEWNAME]([MKTSEGMENT].[ID]),
@CONSOLIDATEDVIEWNAME = [QUERYVIEWCATALOG].[OBJECTNAME]
from dbo.[MKTSEGMENT]
inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENT].[IDSETREGISTERID]
inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[RECORDTYPEID] = [IDSETREGISTER].[RECORDTYPEID]
where [MKTSEGMENT].[ID] = @SEGMENTID;
set @SQL = 'select distinct [CONSOL].[SOURCEQUERYVIEWID], [CONSOL].[SOURCELISTCODE], [CONSOL].[SOURCELISTNAME], [CONSOL].[SOURCELISTCODEVALUEID]' + char(13) +
'from dbo.[' + @SEGMENTVIEWNAME + '] as [SEG]' + char(13) +
'inner join dbo.[' + @CONSOLIDATEDVIEWNAME + '] as [CONSOL] on [CONSOL].[ID] = [SEG].[ID]';
insert into #CONSOLCODESTABLE
exec (@SQL);
if exists(select top 1 1 from #CONSOLCODESTABLE)
begin
-- add all the list codes to our source code temp table to return
declare @CONSOLITEMTYPE nvarchar(255);
declare @CONSOLITEMNAME nvarchar(50);
declare @CONSOLREGEX nvarchar(255);
declare @CONSOLLENGTH tinyint;
-- get the list code info
select
@CONSOLITEMTYPE = [MKTSOURCECODEPARTDEFINITION].[ITEMTYPE],
@CONSOLITEMNAME = [MKTSOURCECODEPARTDEFINITION].[NAME],
@CONSOLLENGTH = [MKTSOURCECODEITEM].[LENGTH]
from dbo.[MKTSOURCECODEITEM]
left join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where [SOURCECODEID] = @SOURCECODEID
and [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 6;
-- insert all the consolidated list codes that the segment is actually using
insert into #SOURCECODETABLE
select
6,
@CONSOLITEMTYPE,
@CONSOLITEMNAME,
@CONSOLLENGTH,
isnull([SOURCELISTCODE], ''),
isnull([SOURCELISTNAME],''),
[SOURCELISTCODEVALUEID],
@SOURCECODEID
from #CONSOLCODESTABLE;
end
end
end
end
end
-- return the source code parts for the segment
select
[ITEMTYPECODE],
[ITEMTYPE],
[ITEMNAME],
[LENGTH],
[CODE],
[NAME],
[CODEVALUEID],
[SOURCECODEID]
from #SOURCECODETABLE;
if object_id('tempdb..#SOURCECODETABLE') is not null
drop table #SOURCECODETABLE;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;