USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_MULTIPLE_7
The save procedure used by the edit dataform template "Marketing Effort Multiple Segment Edit Form 4".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(max) | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@ASKLADDER | xml | IN | Ask ladder |
@ASKLADDERLOADED | bit | IN | Ask ladder loaded |
@TESTSEGMENTCODE | nvarchar(10) | IN | Test segment |
@TESTSEGMENTCODELOADED | bit | IN | Test segment code loaded |
@PACKAGEID | uniqueidentifier | IN | Package |
@PACKAGECODE | nvarchar(10) | IN | Package code |
@PACKAGELOADED | bit | IN | Package loaded |
@RESPONSERATE | decimal(5, 2) | IN | Response rate |
@RESPONSERATELOADED | bit | IN | Response rate loaded |
@GIFTAMOUNT | money | IN | Gift amount |
@GIFTAMOUNTLOADED | bit | IN | Gift amount loaded |
@SAMPLESIZE | int | IN | Sample size |
@SAMPLESIZETYPECODE | tinyint | IN | Sample size type |
@SAMPLESIZEMETHODCODE | tinyint | IN | Sample size method |
@SAMPLESIZEEXCLUDEREMAINDER | bit | IN | Exclude remaining records from the marketing effort |
@SAMPLESIZELOADED | bit | IN | Sample size loaded |
@ADDRESSPROCESSINGOPTIONSLOADED | bit | IN | Address processing options loaded |
@OVERRIDEADDRESSPROCESSING | bit | IN | Override address processing / name format rules |
@USEADDRESSPROCESSING | bit | IN | Use address processing? |
@ADDRESSPROCESSINGOPTIONID | uniqueidentifier | IN | Address processing option ID |
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE | tinyint | IN | Consider seasonal addresses as of |
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE | datetime | IN | Consider seasonal addresses as of |
@NAMEFORMATPARAMETERID | uniqueidentifier | IN | Name format options |
@TESTSEGMENTCODEVALUEID | uniqueidentifier | IN | Test segment code value ID |
@PACKAGECODEVALUEID | uniqueidentifier | IN | Package code value ID |
@ITEMLIST | xml | IN | Items |
@CHANNELSOURCECODE | nvarchar(10) | IN | Channel source code |
@CHANNELSOURCECODEVALUEID | uniqueidentifier | IN | Channel code value ID |
@OVERRIDEBUSINESSUNITSLOADED | bit | IN | Override business units loaded |
@OVERRIDEBUSINESSUNITS | bit | IN | Override business units |
@BUSINESSUNITS | xml | IN | Business units |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@EXCLUDE | bit | IN | Exclude from effort but show counts |
@EXCLUDELOADED | bit | IN | Segment |
Definition
Copy
CREATE procedure dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTSEGMENTATIONSEGMENT_MULTIPLE_7]
(
@ID nvarchar(max),
@CHANGEAGENTID uniqueidentifier = null,
@ASKLADDER xml,
@ASKLADDERLOADED bit,
@TESTSEGMENTCODE nvarchar(10),
@TESTSEGMENTCODELOADED bit,
@PACKAGEID uniqueidentifier,
@PACKAGECODE nvarchar(10),
@PACKAGELOADED bit,
@RESPONSERATE decimal(5,2),
@RESPONSERATELOADED bit,
@GIFTAMOUNT money,
@GIFTAMOUNTLOADED bit,
@SAMPLESIZE int,
@SAMPLESIZETYPECODE tinyint,
@SAMPLESIZEMETHODCODE tinyint,
@SAMPLESIZEEXCLUDEREMAINDER bit,
@SAMPLESIZELOADED bit,
@ADDRESSPROCESSINGOPTIONSLOADED bit,
@OVERRIDEADDRESSPROCESSING bit,
@USEADDRESSPROCESSING bit,
@ADDRESSPROCESSINGOPTIONID uniqueidentifier,
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE tinyint,
@ADDRESSPROCESSINGOPTIONSEASONALASOFDATE datetime,
@NAMEFORMATPARAMETERID uniqueidentifier,
@TESTSEGMENTCODEVALUEID uniqueidentifier,
@PACKAGECODEVALUEID uniqueidentifier,
@ITEMLIST xml,
@CHANNELSOURCECODE nvarchar(10),
@CHANNELSOURCECODEVALUEID uniqueidentifier,
@OVERRIDEBUSINESSUNITSLOADED bit,
@OVERRIDEBUSINESSUNITS bit,
@BUSINESSUNITS xml,
@CURRENTAPPUSERID uniqueidentifier,
@EXCLUDE bit,
@EXCLUDELOADED bit
)
as
set nocount on;
declare @SEGMENTATIONSEGMENTS table([ID] uniqueidentifier);
declare @START int;
declare @POS int;
declare @SEGMENTID uniqueidentifier;
declare @SEGMENTTYPECODE tinyint;
declare @SQL nvarchar(max);
declare @SEGMENTATIONID uniqueidentifier;
declare @DATATABLENAME nvarchar(128);
declare @PACKAGECHANNELCODE tinyint;
declare @OLDEXCLUDE bit;
declare @OLDSEGMENTATIONPACKAGEID uniqueidentifier;
declare @OLDPACKAGEID uniqueidentifier;
declare @OLDPACKAGECHANNELCODE tinyint;
declare @OLDSAMPLESIZE int;
declare @OLDSAMPLESIZETYPECODE tinyint;
declare @OLDSAMPLESIZEMETHODCODE tinyint;
declare @OLDSAMPLESIZEEXCLUDEREMAINDER bit;
declare @OLDASKLADDERID uniqueidentifier;
declare @CURRENTDATE datetime;
declare @OLDUSEADDRESSPROCESSING bit;
declare @OLDADDRESSPROCESSINGOPTIONID uniqueidentifier;
declare @SEQUENCE integer;
declare @PACKAGECHANNELCHANGED bit;
declare @ADDRESSPROCESSINGOPTIONSCHANGED bit;
declare @ASKLADDERID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @ORGANIZATIONGIFTAMOUNT money;
declare @ORGANIZATIONCURRENCYEXCHANGERATEID uniqueidentifier;
declare @TESTSEGMENTID uniqueidentifier;
declare @ORIGINALITEMLIST xml;
begin try
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
set @ORGANIZATIONCURRENCYID = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
if @EXCLUDELOADED = 1 and @EXCLUDE = 1
begin
set @ASKLADDERLOADED = 1;
set @TESTSEGMENTCODELOADED = 1;
set @PACKAGELOADED = 1;
set @RESPONSERATELOADED = 1;
set @GIFTAMOUNTLOADED = 1;
set @SAMPLESIZELOADED = 1;
set @ADDRESSPROCESSINGOPTIONSLOADED = 1;
set @OVERRIDEBUSINESSUNITSLOADED = 1;
set @PACKAGEID = null;
set @ASKLADDERID = null;
set @RESPONSERATE = 0;
set @GIFTAMOUNT = 0;
set @SAMPLESIZE = 100;
set @SAMPLESIZETYPECODE = 0;
set @SAMPLESIZEMETHODCODE = 0;
set @OVERRIDEADDRESSPROCESSING = 0;
set @ITEMLIST = null;
set @PACKAGECODE = '';
set @PACKAGECODEVALUEID = null;
set @CHANNELSOURCECODE = '';
set @CHANNELSOURCECODEVALUEID = null;
set @TESTSEGMENTCODE = '';
set @TESTSEGMENTCODEVALUEID = null;
set @OVERRIDEBUSINESSUNITS = 0;
set @BUSINESSUNITS = null;
end
set @ORIGINALITEMLIST = @ITEMLIST;
/* Parse out the multiple segment IDs */
set @START = 0;
select @POS = charindex(',', @ID, @START)
while (@POS <> 0)
begin
insert into @SEGMENTATIONSEGMENTS
select substring(@ID, @START, @POS - @START);
set @START = @POS + 1;
select @POS = charindex(',', @ID, @START);
end;
if len(@ID) > 0
insert into @SEGMENTATIONSEGMENTS
select substring(@ID, @START, 37);
if @SAMPLESIZELOADED = 1 and @SAMPLESIZETYPECODE = 0 and @SAMPLESIZE = 100
set @SAMPLESIZEEXCLUDEREMAINDER = 1;
declare SEGMENTCURSOR cursor local fast_forward for
select [SEG].[ID], [MKTSEGMENTATIONSEGMENT].[SEQUENCE]
from @SEGMENTATIONSEGMENTS as [SEG]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [SEG].[ID]
order by [MKTSEGMENTATIONSEGMENT].[SEQUENCE] desc;
open SEGMENTCURSOR;
fetch next from SEGMENTCURSOR into @SEGMENTID, @SEQUENCE;
while (@@FETCH_STATUS = 0)
begin
select
@SEGMENTATIONID = [MKTSEGMENTATION].[ID],
@DATATABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([MKTSEGMENTATION].[ID]),
@SEGMENTTYPECODE = [MKTSEGMENT].[SEGMENTTYPECODE],
@OLDEXCLUDE = [MKTSEGMENTATIONSEGMENT].[EXCLUDE],
@PACKAGELOADED = (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 1 then 0 else @PACKAGELOADED end),
@SAMPLESIZELOADED = (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 1 then 0 else @SAMPLESIZELOADED end),
@OLDUSEADDRESSPROCESSING = case when [MKTSEGMENTATIONSEGMENT].[OVERRIDEADDRESSPROCESSING] = 1 then [MKTSEGMENTATIONSEGMENT].[USEADDRESSPROCESSING] else [MKTSEGMENTATION].[USEADDRESSPROCESSING] end,
@OLDADDRESSPROCESSINGOPTIONID = case when [MKTSEGMENTATIONSEGMENT].[OVERRIDEADDRESSPROCESSING] = 1 then [MKTSEGMENTATIONSEGMENT].[ADDRESSPROCESSINGOPTIONID] else [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONID] end,
@BASECURRENCYID = [MKTSEGMENTATION].[BASECURRENCYID],
@ORGANIZATIONCURRENCYEXCHANGERATEID = [MKTSEGMENTATIONSEGMENT].[CURRENCYEXCHANGERATEID],
@ORGANIZATIONGIFTAMOUNT = [MKTSEGMENTATIONSEGMENT].[ORGANIZATIONGIFTAMOUNT]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
left outer join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
/* Check if the mailing is currently being activated */
exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;
/* Grab the old packageID info before we save the segment */
if @PACKAGELOADED = 1
select
@OLDSEGMENTATIONPACKAGEID = (select [PAK].[ID] from dbo.[MKTSEGMENTATIONPACKAGE] as [PAK] where [PAK].[SEGMENTATIONID] = [SEG].[SEGMENTATIONID] and [PAK].[PACKAGEID] = [SEG].[PACKAGEID]),
@OLDPACKAGEID = [SEG].[PACKAGEID],
@OLDPACKAGECHANNELCODE = [MKTPACKAGE].[CHANNELCODE]
from dbo.[MKTSEGMENTATIONSEGMENT] as [SEG]
left outer join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [SEG].[PACKAGEID]
where [SEG].[ID] = @SEGMENTID;
if @SAMPLESIZELOADED = 1
select
@OLDSAMPLESIZE = [SAMPLESIZE],
@OLDSAMPLESIZETYPECODE = [SAMPLESIZETYPECODE],
@OLDSAMPLESIZEMETHODCODE = [SAMPLESIZEMETHODCODE],
@OLDSAMPLESIZEEXCLUDEREMAINDER = [SAMPLESIZEEXCLUDEREMAINDER]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [ID] = @SEGMENTID;
if @ASKLADDERLOADED = 1
begin
select
@OLDASKLADDERID = [ASKLADDERID]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [ID] = @SEGMENTID;
select
@ASKLADDERID = T.c.value('(ASKLADDERID)[1]', 'uniqueidentifier')
from @ASKLADDER.nodes('/ASKLADDER/ITEM') T(c);
end
if @ORGANIZATIONCURRENCYID = @BASECURRENCYID
set @ORGANIZATIONGIFTAMOUNT = case when @GIFTAMOUNTLOADED = 1 then @GIFTAMOUNT else @ORGANIZATIONGIFTAMOUNT end;
else
begin
if @ORGANIZATIONCURRENCYEXCHANGERATEID is null
set @ORGANIZATIONCURRENCYEXCHANGERATEID = dbo.[UFN_CURRENCYEXCHANGERATE_GETLATEST](@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null);
if @GIFTAMOUNTLOADED = 1
set @ORGANIZATIONGIFTAMOUNT = dbo.[UFN_CURRENCY_CONVERT](@GIFTAMOUNT, @ORGANIZATIONCURRENCYEXCHANGERATEID);
end
/* Save the segment */
update dbo.[MKTSEGMENTATIONSEGMENT] set
[EXCLUDE] = (case when @EXCLUDELOADED = 1 then @EXCLUDE else [EXCLUDE] end),
[ASKLADDERID] = (case when @ASKLADDERLOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @ASKLADDERID else null end else [ASKLADDERID] end),
[TESTSEGMENTCODE] = (case when @TESTSEGMENTCODELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @TESTSEGMENTCODE else '' end else [TESTSEGMENTCODE] end),
[TESTPARTDEFINITIONVALUESID] = (case when @TESTSEGMENTCODELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @TESTSEGMENTCODEVALUEID else null end else [TESTPARTDEFINITIONVALUESID] end),
[PACKAGEID] = (case when @PACKAGELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @PACKAGEID else null end else [PACKAGEID] end),
[RESPONSERATE] = (case when @RESPONSERATELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @RESPONSERATE else 0 end else [RESPONSERATE] end),
[GIFTAMOUNT] = (case when @GIFTAMOUNTLOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @GIFTAMOUNT else 0 end else [GIFTAMOUNT] end),
[SAMPLESIZE] = (case when @SAMPLESIZELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @SAMPLESIZE else 100 end else [SAMPLESIZE] end),
[SAMPLESIZETYPECODE] = (case when @SAMPLESIZELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @SAMPLESIZETYPECODE else 0 end else [SAMPLESIZETYPECODE] end),
[SAMPLESIZEMETHODCODE] = (case when @SAMPLESIZELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @SAMPLESIZEMETHODCODE else 0 end else [SAMPLESIZEMETHODCODE] end),
[SAMPLESIZEEXCLUDEREMAINDER] = (case when @SAMPLESIZELOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @SAMPLESIZEEXCLUDEREMAINDER else 1 end else [SAMPLESIZEEXCLUDEREMAINDER] end),
[OVERRIDEADDRESSPROCESSING] = (case when @SEGMENTTYPECODE <> 2 and @ADDRESSPROCESSINGOPTIONSLOADED = 1 then case when (@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0) then @OVERRIDEADDRESSPROCESSING else 0 end else [OVERRIDEADDRESSPROCESSING] end),
[USEADDRESSPROCESSING] = (case when @SEGMENTTYPECODE <> 2 and @ADDRESSPROCESSINGOPTIONSLOADED = 1 then case when @OVERRIDEADDRESSPROCESSING = 1 and ((@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0)) then @USEADDRESSPROCESSING else 0 end else [USEADDRESSPROCESSING] end),
[ADDRESSPROCESSINGOPTIONID] = (case when @SEGMENTTYPECODE <> 2 and @ADDRESSPROCESSINGOPTIONSLOADED = 1 then case when @OVERRIDEADDRESSPROCESSING = 1 and @USEADDRESSPROCESSING = 1 and ((@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0)) then @ADDRESSPROCESSINGOPTIONID else null end else [ADDRESSPROCESSINGOPTIONID] end),
[ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE] = (case when @SEGMENTTYPECODE <> 2 and @ADDRESSPROCESSINGOPTIONSLOADED = 1 then case when @OVERRIDEADDRESSPROCESSING = 1 and @USEADDRESSPROCESSING = 1 and ((@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0)) then @ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE else 0 end else [ADDRESSPROCESSINGOPTIONSEASONALASOFDATETYPECODE] end),
[ADDRESSPROCESSINGOPTIONSEASONALASOFDATE] = (case when @SEGMENTTYPECODE <> 2 and @ADDRESSPROCESSINGOPTIONSLOADED = 1 then case when @OVERRIDEADDRESSPROCESSING = 1 and @USEADDRESSPROCESSING = 1 and ((@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0)) then @ADDRESSPROCESSINGOPTIONSEASONALASOFDATE else null end else [ADDRESSPROCESSINGOPTIONSEASONALASOFDATE] end),
[NAMEFORMATPARAMETERID] = (case when @SEGMENTTYPECODE <> 2 and @ADDRESSPROCESSINGOPTIONSLOADED = 1 then case when @OVERRIDEADDRESSPROCESSING = 1 and @USEADDRESSPROCESSING = 1 and ((@EXCLUDELOADED = 1 and @EXCLUDE = 0) or (@EXCLUDELOADED = 0 and [EXCLUDE] = 0)) then @NAMEFORMATPARAMETERID else null end else [NAMEFORMATPARAMETERID] end),
[CURRENCYEXCHANGERATEID] = @ORGANIZATIONCURRENCYEXCHANGERATEID,
[ORGANIZATIONGIFTAMOUNT] = @ORGANIZATIONGIFTAMOUNT,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @SEGMENTID;
if @PACKAGELOADED = 1
begin
/* Save and update the package for the segment */
if isnull(@OLDPACKAGEID, '00000000-0000-0000-0000-000000000000') <> isnull(@PACKAGEID, '00000000-0000-0000-0000-000000000000') or @OLDEXCLUDE <> @EXCLUDE
begin
/* Remove the old package, only if is not being used by any other segments and test segments */
if @OLDEXCLUDE = 0 and
not exists(select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @OLDPACKAGEID) and
not exists(select [MKTSEGMENTATIONTESTSEGMENT].[ID] from dbo.[MKTSEGMENTATIONTESTSEGMENT] inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID and [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = @OLDPACKAGEID)
exec dbo.[USP_MKTSEGMENTATIONPACKAGE_DELETE] @OLDSEGMENTATIONPACKAGEID, @CHANGEAGENTID;
/* Add the new package, only if it doesn't exist already */
if @EXCLUDE = 0 and not exists(select [ID] from dbo.[MKTSEGMENTATIONPACKAGE] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @PACKAGEID)
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTATIONPACKAGE] null, @CHANGEAGENTID, @SEGMENTATIONID, @PACKAGEID;
select @PACKAGECHANNELCODE = [CHANNELCODE] from dbo.[MKTPACKAGE] where [ID] = @PACKAGEID;
if (@OLDPACKAGECHANNELCODE <> @PACKAGECHANNELCODE and @USEADDRESSPROCESSING = 1 and @ADDRESSPROCESSINGOPTIONID is not null)
/* clear the cache for this segment and all segments after it,
since the package's channel can affect record counts when address processing is used */
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @SEGMENTID, 0, 1;
end
if @EXCLUDE = 0
/* Update the package with the selected code */
exec dbo.[USP_MKTPACKAGE_UPDATECODE] @PACKAGEID, @PACKAGECODE, @PACKAGECODEVALUEID, @CHANNELSOURCECODE, @CHANNELSOURCECODEVALUEID, @CHANGEAGENTID, @CURRENTAPPUSERID;
if @OLDEXCLUDE <> @EXCLUDE
begin
if exists (select top 1 1 from sys.objects where name = @DATATABLENAME)
begin
set @SQL = '-- make finder number nullable' + char(13) +
'if exists (select top 1 1 from dbo.sysindexes where name = ''UIX_' + @DATATABLENAME + '_FINDERNUMBER'')' + char(13) +
' drop index [UIX_' + @DATATABLENAME + '_FINDERNUMBER] on dbo.[' + @DATATABLENAME + '];' + char(13) +
'alter table dbo.[' + @DATATABLENAME + '] alter column [FINDERNUMBER] bigint null;' + char(13) +
char(13) +
'-- wipe out finder numbers for this segment' + char(13) +
'update dbo.[' + @DATATABLENAME + '] set [FINDERNUMBER] = null' +
case when @EXCLUDE = 1 then ', [SOURCECODE] = '''' ' else ' ' end +
'where [SEGMENTID] = @SEGMENTID;';
exec sp_executesql @SQL, N'@SEGMENTID uniqueidentifier', @SEGMENTID = @SEGMENTID;
end
if @EXCLUDE = 1
begin
-- inline exclusions may not have test segments
declare TESTSEGMENTS cursor local fast_forward for
select [ID]
from dbo.[MKTSEGMENTATIONTESTSEGMENT]
where [SEGMENTID] = @SEGMENTID
order by [SEQUENCE] desc;
open TESTSEGMENTS
fetch next from TESTSEGMENTS into @TESTSEGMENTID;
while (@@FETCH_STATUS = 0)
begin
exec dbo.[USP_MKTSEGMENTATIONTESTSEGMENT_DELETE] @TESTSEGMENTID, @CHANGEAGENTID;
fetch next from TESTSEGMENTS into @TESTSEGMENTID;
end
close TESTSEGMENTS;
deallocate TESTSEGMENTS;
end
end
end
if @PACKAGELOADED = 1
if @PACKAGECHANNELCHANGED = 0
set @PACKAGECHANNELCHANGED = case when (@OLDPACKAGECHANNELCODE <> @PACKAGECHANNELCODE) then 1 else 0 end;
if @ADDRESSPROCESSINGOPTIONSLOADED = 1
if @ADDRESSPROCESSINGOPTIONSCHANGED = 0
set @ADDRESSPROCESSINGOPTIONSCHANGED = case when (@OLDUSEADDRESSPROCESSING <> @USEADDRESSPROCESSING or (@USEADDRESSPROCESSING = 1 and ((@OLDADDRESSPROCESSINGOPTIONID is null and @OLDADDRESSPROCESSINGOPTIONID is not null) or (@OLDADDRESSPROCESSINGOPTIONID is not null and @OLDADDRESSPROCESSINGOPTIONID is null) or @OLDADDRESSPROCESSINGOPTIONID <> @OLDADDRESSPROCESSINGOPTIONID))) then 1 else 0 end;
/* Clear the segment cache only if the sample size settings changed */
if (@EXCLUDELOADED = 1 and (@OLDEXCLUDE <> @EXCLUDE)) or
(@SAMPLESIZELOADED = 1 and (@OLDSAMPLESIZEEXCLUDEREMAINDER <> @SAMPLESIZEEXCLUDEREMAINDER or @OLDSAMPLESIZE <> @SAMPLESIZE or @OLDSAMPLESIZETYPECODE <> @SAMPLESIZETYPECODE or @OLDSAMPLESIZEMETHODCODE <> @SAMPLESIZEMETHODCODE)) or
(@ADDRESSPROCESSINGOPTIONSLOADED = 1 and (@OLDUSEADDRESSPROCESSING <> @USEADDRESSPROCESSING or (@USEADDRESSPROCESSING = 1 and ((@OLDADDRESSPROCESSINGOPTIONID is null and @OLDADDRESSPROCESSINGOPTIONID is not null) or (@OLDADDRESSPROCESSINGOPTIONID is not null and @OLDADDRESSPROCESSINGOPTIONID is null) or @OLDADDRESSPROCESSINGOPTIONID <> @OLDADDRESSPROCESSINGOPTIONID)))) or
(@PACKAGELOADED = 1 and (@OLDPACKAGECHANNELCODE <> @PACKAGECHANNELCODE and (@USEADDRESSPROCESSING = 1 and @ADDRESSPROCESSINGOPTIONID is not null))) or
(@ASKLADDERLOADED = 1 and ((@OLDASKLADDERID is null and @ASKLADDERID is not null) or (@OLDASKLADDERID is not null and @ASKLADDERID is null) or (@OLDASKLADDERID <> @ASKLADDERID)))
/* Clear the cache for this segment and all segments after it */
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @SEGMENTID, 0, 1;
/* insert new ids into item list for each test segment */
if @ORIGINALITEMLIST is not null
begin
declare @ITEMLISTTABLE table
(
[CODE] nvarchar(50),
[ID] uniqueidentifier,
[PARTDEFINITIONVALUESID] uniqueidentifier,
[SEGMENTATIONID] uniqueidentifier,
[SOURCECODEITEMID] uniqueidentifier
);
/* get existing parts for this segment */
insert into @ITEMLISTTABLE
select
[CODE],
[ID],
[PARTDEFINITIONVALUESID],
[SEGMENTATIONID],
[SOURCECODEITEMID]
from dbo.[UFN_MKTSOURCECODEPART_SEGMENTATIONSEGMENT_GETITEMLIST3](@SEGMENTID);
--Remove the ones we are updating
delete @ITEMLISTTABLE where [SOURCECODEITEMID] in (select [SOURCECODEITEMID] from dbo.[UFN_MKTSOURCECODEPART_SEGMENTATIONSEGMENT_GETITEMLIST3_FROMITEMLISTXML](@ORIGINALITEMLIST));
/* insert unique MKTSOURCECODEPART ID for each value in the itemlist */
insert into @ITEMLISTTABLE
select
[CODE],
newid(),
[PARTDEFINITIONVALUESID],
[SEGMENTATIONID],
[SOURCECODEITEMID]
from dbo.[UFN_MKTSOURCECODEPART_SEGMENTATIONSEGMENT_GETITEMLIST3_FROMITEMLISTXML](@ORIGINALITEMLIST);
set @ITEMLIST =
(
select
[ID],
[SOURCECODEITEMID],
[PARTDEFINITIONVALUESID],
[CODE],
[SEGMENTATIONID]
from @ITEMLISTTABLE
for xml raw('ITEM'), type, elements, root('ITEMLIST'), binary base64);
delete from @ITEMLISTTABLE;
/* Save the source code information */
exec dbo.[USP_MKTSOURCECODEPART_SEGMENTATIONSEGMENT_GETITEMLIST_UPDATEFROMXML] @SEGMENTID, @ITEMLIST, @CHANGEAGENTID, @CURRENTDATE;
end
/* Save the business units information */
if @SEGMENTTYPECODE in (1, 2) and @OVERRIDEBUSINESSUNITSLOADED = 1
begin
update dbo.[MKTSEGMENTATIONSEGMENT] set
[OVERRIDEBUSINESSUNITS] = @OVERRIDEBUSINESSUNITS,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @SEGMENTID;
exec dbo.[USP_MKTSEGMENTATIONSEGMENTBUSINESSUNIT_GETBUSINESSUNITS_UPDATEFROMXML] @SEGMENTID, @BUSINESSUNITS, @CHANGEAGENTID;
end
fetch next from SEGMENTCURSOR into @SEGMENTID, @SEQUENCE;
end
close SEGMENTCURSOR;
deallocate SEGMENTCURSOR;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;