USP_MKTSEGMENTATIONEXCLUSION_ADDTOEXCLUSIONREPORT

Add removed members to the marketing effort exclusion report.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONEXCLUSIONID uniqueidentifier IN
@TARGETEXCLUSIONTABLE nvarchar(128) IN
@TEMPREMOVEDMEMBERSTABLE nvarchar(128) IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATIONEXCLUSION_ADDTOEXCLUSIONREPORT]
(
  @SEGMENTATIONEXCLUSIONID uniqueidentifier,
  @TARGETEXCLUSIONTABLE nvarchar(128),
  @TEMPREMOVEDMEMBERSTABLE nvarchar(128)
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @SOURCEEXCLUSIONTABLE nvarchar(128);
  declare @EXCLUSIONTABLE nvarchar(128);
  declare @SQL nvarchar(max);
  declare @USECOMPRESSION bit = (case when serverproperty('engineedition') = 3 then 1 else 0 end);

  begin try
    select
      @SEGMENTATIONID = [SEGMENTATIONID]
    from dbo.[MKTSEGMENTATIONEXCLUSION]
    where [ID] = @SEGMENTATIONEXCLUSIONID;

    -- determine the name of the table in which members that have been removed are stored

    set @EXCLUSIONTABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATEEXCLUSION_MAKETABLENAME](@SEGMENTATIONID);
    set @SOURCEEXCLUSIONTABLE = null;

    -- we're going to make a copy of the most recent exclusion report table...

    select
      @SOURCEEXCLUSIONTABLE = [TABLENAME]
    from dbo.[BUSINESSPROCESSOUTPUT]
    where [TABLEKEY] = 'EFFORTEXCLUSIONS'
    and [BUSINESSPROCESSSTATUSID] = (
      select top 1 [MKTUPDATEMAILINGCOUNTSPROCESSSTATUS].[ID]
      from dbo.[MKTUPDATEMAILINGCOUNTSPROCESSSTATUS]
      inner join dbo.[MKTUPDATEMAILINGCOUNTSPROCESS] on [MKTUPDATEMAILINGCOUNTSPROCESS].[ID] = [MKTUPDATEMAILINGCOUNTSPROCESSSTATUS].[PARAMETERSETID]
      inner join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[ID] = [MKTUPDATEMAILINGCOUNTSPROCESSSTATUS].[ID]
      inner join dbo.[BUSINESSPROCESSOUTPUT] on [BUSINESSPROCESSOUTPUT].[BUSINESSPROCESSSTATUSID] = [BUSINESSPROCESSSTATUS].[ID]
      where [MKTUPDATEMAILINGCOUNTSPROCESS].[SEGMENTATIONID] = @SEGMENTATIONID
      and [BUSINESSPROCESSSTATUS].[STATUSCODE] = 0
      order by [BUSINESSPROCESSSTATUS].[STARTEDON] desc);

    if @SOURCEEXCLUSIONTABLE is null
      select
        @SOURCEEXCLUSIONTABLE = [TABLENAME]
      from dbo.[BUSINESSPROCESSOUTPUT]
      where [TABLEKEY] = 'EFFORTEXCLUSIONS'
      and [BUSINESSPROCESSSTATUSID] = (
        select top 1 [MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS].[ID]
        from dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS]
        inner join dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS] on [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[ID] = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS].[PARAMETERSETID]
        inner join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[ID] = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS].[ID]
        where [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[SEGMENTATIONID] = @SEGMENTATIONID
        and [BUSINESSPROCESSSTATUS].[STATUSCODE] = 0
        order by [BUSINESSPROCESSSTATUS].[STARTEDON] desc);

    -- ...and have it be the output of this remove members process

    set @SQL = 'insert into dbo.[' + @TARGETEXCLUSIONTABLE + '] ([DONORID], [DONORNAME], [EXCLUDEDFROMSEGMENT], [INCLUDEDINSEGMENT], [EXCLUSIONREASON], [EXCLUSIONTYPE], [EXCLUSIONTYPECODE])' + char(13) +
               '  select [DONORID], [DONORNAME], [EXCLUDEDFROMSEGMENT], [INCLUDEDINSEGMENT], [EXCLUSIONREASON], [EXCLUSIONTYPE], [EXCLUSIONTYPECODE] from dbo.[' + @SOURCEEXCLUSIONTABLE + ']';
    exec (@SQL);

    -- we're going to add the removed members from this run of the remove members process to the new

    -- exclusion report table

    set @SQL = 'insert into [' + @TEMPREMOVEDMEMBERSTABLE + '] ([DONORID], [SEGMENTID], [SEGMENTNAME], [QUERYVIEWCATALOGID])' + char(13) +
               '  select [EX].[DONORID], [MKTSEGMENT].[ID], case when [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 1 then ''Exclude: '' else '''' end + [MKTSEGMENT].[NAME], [EX].[DONORQUERYVIEWCATALOGID]' + char(13) +
               '  from dbo.[' + @EXCLUSIONTABLE + '] as [EX]' + char(13) +
               '  inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [EX].[SEGMENTID]' + char(13) +
               '  inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]' + char(13) +
               '  where [EX].[SEGMENTATIONEXCLUSIONID] = @SEGMENTATIONEXCLUSIONID';
    exec sp_executesql @SQL, N'@SEGMENTATIONEXCLUSIONID uniqueidentifier', @SEGMENTATIONEXCLUSIONID = @SEGMENTATIONEXCLUSIONID;

    -- (this will populate the [NAME] field in the temp table and create indexes on it)

    exec dbo.[USP_MKTSEGMENTATION_POPULATEEXCLUDEDIDSTEMPTABLE] @SEGMENTATIONID, @TEMPREMOVEDMEMBERSTABLE, 1;

    -- add the members removed to the marketing effort exclusion data with a type code of 7

    set @SQL = 'insert into dbo.[' + @TARGETEXCLUSIONTABLE + '] ([DONORID], [DONORNAME], [EXCLUDEDFROMSEGMENT], [INCLUDEDINSEGMENT], [EXCLUSIONREASON], [EXCLUSIONTYPE], [EXCLUSIONTYPECODE])' + char(13) +
               '  select [DONORID], [NAME], [SEGMENTNAME], '''', ''Removed'', ''Remove Members Process'', 7' + char(13) +
               '  from [' + @TEMPREMOVEDMEMBERSTABLE + ']';
    exec (@SQL);

    set @SQL = 'create nonclustered index [IX_' + @TARGETEXCLUSIONTABLE + '_DONORID] on dbo.[' + @TARGETEXCLUSIONTABLE + '] ([DONORID]) with (PAD_INDEX  = off, SORT_IN_TEMPDB = on, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off, FILLFACTOR = 100' + (case when @USECOMPRESSION = 1 then ', DATA_COMPRESSION = PAGE' else '' end) + ') on [IDXGROUP]'
    exec (@SQL);
  end try

  begin catch
    exec dbo.[USP_RAISE_ERROR];
    return 1;
  end catch

  return 0;