USP_MKTSEGMENTATIONTESTSEGMENT_DELETE
Executes the "Marketing Effort Test Segment: Delete" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being deleted. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the delete. |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATIONTESTSEGMENT_DELETE]
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
declare @ACTIVE bit;
declare @SEGMENTATIONID uniqueidentifier;
declare @SEGMENTATIONPACKAGEID uniqueidentifier;
declare @PACKAGEID uniqueidentifier;
declare @PARENTSEGMENTID uniqueidentifier;
declare @RECORDSOURCEID uniqueidentifier;
declare @SEQUENCE int;
declare @DATATABLE nvarchar(128);
declare @SQL nvarchar(max);
begin try
/* Grab some info so we can remove the package and reorder the rest of the test segments after the delete */
select
@SEGMENTATIONID = [SEG].[SEGMENTATIONID],
@SEGMENTATIONPACKAGEID = (select [PAK].[ID] from dbo.[MKTSEGMENTATIONPACKAGE] as [PAK] where [PAK].[SEGMENTATIONID] = [SEG].[SEGMENTATIONID] and [PAK].[PACKAGEID] = [TESTSEG].[PACKAGEID]),
@PACKAGEID = [TESTSEG].[PACKAGEID],
@PARENTSEGMENTID = [SEG].[ID],
@RECORDSOURCEID = [MKTSEGMENT].[QUERYVIEWCATALOGID],
@SEQUENCE = [TESTSEG].[SEQUENCE]
from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [TESTSEG]
inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SEG] on [SEG].[ID] = [TESTSEG].[SEGMENTID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [SEG].[SEGMENTID]
where [TESTSEG].[ID] = @ID;
select @ACTIVE = [ACTIVE] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID;
if @ACTIVE = 0
--Check if the mailing is currently being activated...
exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;
/* Delete segmentation test segment rows from the MKTSOURCECODEPART table. */
declare @MKTSOURCECODEPARTID uniqueidentifier;
declare MKTSOURCECODEPARTCURSOR cursor local fast_forward for
select [ID]
from dbo.[MKTSOURCECODEPART]
where [SEGMENTATIONTESTSEGMENTID] = @ID;
open MKTSOURCECODEPARTCURSOR;
fetch next from MKTSOURCECODEPARTCURSOR into @MKTSOURCECODEPARTID;
while (@@FETCH_STATUS = 0)
begin
exec dbo.[USP_MKTSOURCECODEPART_DELETEBYID_WITHCHANGEAGENTID] @MKTSOURCECODEPARTID, @CHANGEAGENTID;
fetch next from MKTSOURCECODEPARTCURSOR into @MKTSOURCECODEPARTID;
end;
close MKTSOURCECODEPARTCURSOR;
deallocate MKTSOURCECODEPARTCURSOR;
/* delete the mailing data and source analysis rule data */
if @ACTIVE = 0
begin
set @DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID);
if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @DATATABLE)
begin
set @SQL = 'update dbo.[' + @DATATABLE + '] set [TESTSEGMENTID] = null where [SEGMENTID] = @SEGMENTID and [TESTSEGMENTID] = @ID;';
exec sp_executesql @SQL, N'@SEGMENTID uniqueidentifier, @ID uniqueidentifier', @SEGMENTID = @PARENTSEGMENTID, @ID = @ID;
end
set @DATATABLE = dbo.[UFN_MKTSOURCEANALYSISRULE_MAKETABLENAME](@RECORDSOURCEID);
if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @DATATABLE)
begin
set @SQL = 'update dbo.[' + @DATATABLE + '] set [TESTSEGMENTID] = null where [SEGMENTID] = @SEGMENTID and [TESTSEGMENTID] = @ID;';
exec sp_executesql @SQL, N'@SEGMENTID uniqueidentifier, @ID uniqueidentifier', @SEGMENTID = @PARENTSEGMENTID, @ID = @ID;
end
end
/* Delete test segment from segmented house file import */
if dbo.[UFN_MKTCONSTITUENTFILEIMPORT_IMPORTTABLEEXISTS](@SEGMENTATIONID) = 1
begin
set @DATATABLE = dbo.[UFN_MKTCONSTITUENTFILEIMPORT_BUILDTABLENAME](@SEGMENTATIONID);
set @SQL = 'delete from dbo.[' + @DATATABLE + '] where [SEGMENTATIONTESTSEGMENTID] = @ID;';
exec sp_executesql @SQL, N'@ID uniqueidentifier', @ID = @ID;
end
-- clear the cached information for the parent segment to force mailing data recalculation
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @PARENTSEGMENTID, 0, 1;
/* Delete the test segment */
exec dbo.[USP_MKTSEGMENTATIONTESTSEGMENT_DELETEBYID_WITHCHANGEAGENTID] @ID, @CHANGEAGENTID;
/* Remove the package, only if is not being used by any other segments or test segments */
if not exists(select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID and [PACKAGEID] = @PACKAGEID) 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] = @PACKAGEID)
exec dbo.[USP_MKTSEGMENTATIONPACKAGE_DELETE] @SEGMENTATIONPACKAGEID, @CHANGEAGENTID;
/* Reorder the rest of the test segments in this parent segment */
update dbo.[MKTSEGMENTATIONTESTSEGMENT]
set [SEQUENCE] = ([SEQUENCE] - 1), [CHANGEDBYID]=@CHANGEAGENTID
where [SEGMENTID] = @PARENTSEGMENTID and [SEQUENCE] > @SEQUENCE;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;