USP_MKTSEGMENTATIONSEGMENT_GETCOMMONUSERDEFINEDCODES
Returns a table of user defined source codes that are common for given segments.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTIDSXML | xml | IN | |
@SOURCECODEID | uniqueidentifier | IN | |
@USERDEFINEDLOADEDSOURCECODESXML | xml | INOUT |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATIONSEGMENT_GETCOMMONUSERDEFINEDCODES]
(
@SEGMENTIDSXML xml,
@SOURCECODEID uniqueidentifier,
@USERDEFINEDLOADEDSOURCECODESXML xml = null output
)
as
begin
/* Convert IDs from xml to table */
declare @SEGMENTSTABLE table([ID] uniqueidentifier);
insert into @SEGMENTSTABLE
select
T.c.value('(ID)[1]','uniqueidentifier') AS 'ID'
from @SEGMENTIDSXML.nodes('/ITEMLIST/ITEM') T(c);
declare @USERDEFINEDLOADEDSOURCECODES table([PARTDEFINITIONVALUESID] uniqueidentifier, [CODE] nvarchar(10));
declare @USERDEFINEDPARTDEFINITIONID uniqueidentifier;
declare USERDEFINEDPARTS_CURSOR cursor local fast_forward
for
select
[MKTSOURCECODEPARTDEFINITION].[ID]
from dbo.[MKTSOURCECODEITEM]
inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
where
[MKTSOURCECODEITEM].[SOURCECODEID] = @SOURCECODEID and
[MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 5;
open USERDEFINEDPARTS_CURSOR
fetch next from USERDEFINEDPARTS_CURSOR into @USERDEFINEDPARTDEFINITIONID;
while (@@fetch_status = 0)
begin
if (select COUNT(distinct ([MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]))
from dbo.[MKTSOURCECODEPART]
inner join [MKTSOURCECODEPARTDEFINITIONVALUES] on [MKTSOURCECODEPARTDEFINITIONVALUES].[ID] = [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]
where
[MKTSOURCECODEPART].[SEGMENTATIONTESTSEGMENTID] is null and
[MKTSOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONID] = @USERDEFINEDPARTDEFINITIONID) = 1
begin
/* All of the segments are using the default mailing user defined code for this source code part. */
insert into @USERDEFINEDLOADEDSOURCECODES
select distinct
[MKTSOURCECODEPART].[PARTDEFINITIONVALUESID],
[MKTSOURCECODEPART].[CODE]
from dbo.[MKTSOURCECODEPART]
inner join [MKTSOURCECODEPARTDEFINITIONVALUES] on [MKTSOURCECODEPARTDEFINITIONVALUES].[ID] = [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]
where
[MKTSOURCECODEPART].[SEGMENTATIONTESTSEGMENTID] is null and
[MKTSOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONID] = @USERDEFINEDPARTDEFINITIONID
end
else if (select count(*)
from (
select distinct
[MKTSOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONID],
[MKTSOURCECODEPART].[PARTDEFINITIONVALUESID],
[MKTSOURCECODEPART].[CODE]
from @SEGMENTSTABLE [S]
left join dbo.[MKTSOURCECODEPART] on [MKTSOURCECODEPART].[SEGMENTATIONSEGMENTID] = [S].[ID]
left join dbo.[MKTSOURCECODEPARTDEFINITIONVALUES] on ([MKTSOURCECODEPARTDEFINITIONVALUES].[ID] = [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID] and [MKTSOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONID] = @USERDEFINEDPARTDEFINITIONID)
where
[MKTSOURCECODEPART].[SEGMENTATIONTESTSEGMENTID] is null
) as [UNIQUEUSERDEFINEDCODES]) = 1
begin
/*All of the segments are using the same user defined code for this source code part (and not the mailing default). */
insert into @USERDEFINEDLOADEDSOURCECODES
select distinct
[MKTSOURCECODEPART].[PARTDEFINITIONVALUESID],
[MKTSOURCECODEPART].[CODE]
from @SEGMENTSTABLE [S]
left join dbo.[MKTSOURCECODEPART] on [MKTSOURCECODEPART].[SEGMENTATIONSEGMENTID] = [S].[ID]
left join dbo.[MKTSOURCECODEPARTDEFINITIONVALUES] on ([MKTSOURCECODEPARTDEFINITIONVALUES].[ID] = [MKTSOURCECODEPART].[PARTDEFINITIONVALUESID] and [MKTSOURCECODEPARTDEFINITIONVALUES].[MKTSOURCECODEPARTDEFINITIONID] = @USERDEFINEDPARTDEFINITIONID)
where
[MKTSOURCECODEPART].[SEGMENTATIONTESTSEGMENTID] is null
end
fetch next from USERDEFINEDPARTS_CURSOR into @USERDEFINEDPARTDEFINITIONID;
end
close USERDEFINEDPARTS_CURSOR;
deallocate USERDEFINEDPARTS_CURSOR;
set @USERDEFINEDLOADEDSOURCECODESXML = (select [PARTDEFINITIONVALUESID], [CODE] from @USERDEFINEDLOADEDSOURCECODES for xml raw('ITEM'),type,elements,root('ITEMLIST'),BINARY BASE64);
return 0;
end