USP_MKTSEGMENTATION_PREACTIVATION

Generates the record counts for a marketing effort and stores them in the Preactivation table.

Parameters

Parameter Parameter Type Mode Description
@BUSINESSPROCESSSTATUSID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATION_PREACTIVATION]
(
  @BUSINESSPROCESSSTATUSID uniqueidentifier
)
with execute as owner
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @CALCULATEPROCESSSTATUSID uniqueidentifier;
  declare @REMOVEMEMBERSPROCESSSTATUSID uniqueidentifier;
  declare @TABLENAME nvarchar(255);
  declare @PROCESSDATE datetime;
  declare @REMOVEDDATE datetime;
  declare @SQL nvarchar(max);
  declare @COUNTS table(
    [SEGMENTID] uniqueidentifier, 
    [SEGMENTNAME] nvarchar(100), 
    [DONORVIEWID] uniqueidentifier,
    [RECORDSOURCENAME] nvarchar(255), 
    [SOURCECODE] nvarchar(50), 
    [RECORDCOUNT] int
    [MAILINGNAME] nvarchar(100), 
    [PROCESSDATE] datetime,
    [EXCLUDE] bit
  );
  declare @REMOVED table(
    [SEGMENTID] uniqueidentifier, 
    [RECORDCOUNT] int
  );

  -- @BUSINESSPROCESSSTATUSID is either a MKTSEGMENTATIONSEGMENTCALCULATEPROCESSSTATUS.ID or a MKTUPDATEMAILINGCOUNTSPROCESSSTATUS.ID


  select
    @CALCULATEPROCESSSTATUSID = [BUSINESSPROCESSSTATUS].[ID],
    @SEGMENTATIONID = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[SEGMENTATIONID],
    @PROCESSDATE = [BUSINESSPROCESSSTATUS].[ENDEDON]
  from dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
  inner join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[BUSINESSPROCESSPARAMETERSETID] = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[ID]
  where [BUSINESSPROCESSSTATUS].[ID] = @BUSINESSPROCESSSTATUSID;

  if @CALCULATEPROCESSSTATUSID is null
    begin
      select
        @REMOVEMEMBERSPROCESSSTATUSID = [BUSINESSPROCESSSTATUS].[ID],
        @SEGMENTATIONID = [MKTUPDATEMAILINGCOUNTSPROCESS].[SEGMENTATIONID],
        @PROCESSDATE = [BUSINESSPROCESSSTATUS].[ENDEDON]
      from dbo.[MKTUPDATEMAILINGCOUNTSPROCESS]
      inner join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[BUSINESSPROCESSPARAMETERSETID] = [MKTUPDATEMAILINGCOUNTSPROCESS].[ID]
      where [BUSINESSPROCESSSTATUS].[ID] = @BUSINESSPROCESSSTATUSID;

      select top 1
        @CALCULATEPROCESSSTATUSID = [BUSINESSPROCESSSTATUS].[ID]
      from dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
      inner join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[BUSINESSPROCESSPARAMETERSETID] = [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[ID]
      where [MKTSEGMENTATIONSEGMENTCALCULATEPROCESS].[SEGMENTATIONID] = @SEGMENTATIONID
      and [BUSINESSPROCESSSTATUS].[STATUSCODE] = 0
      order by [BUSINESSPROCESSSTATUS].[ENDEDON] desc;
    end

  select
    @TABLENAME = [TABLENAME]
  from dbo.[BUSINESSPROCESSOUTPUT]
  where [BUSINESSPROCESSSTATUSID] = @CALCULATEPROCESSSTATUSID
  and [TABLEKEY] = 'PREACTIVATION';

  set @SQL = 'select' + char(13) +
             '  [PREACT].[SEGMENTID],' + char(13) +
             '  [PREACT].[SEGMENTNAME],' + char(13) +
             '  [PREACT].[DONORVIEWID],' + char(13) +
             '  case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then ''Segment exclusions'' else [PREACT].[RECORDSOURCENAME] end [RECORDSOURCENAME],' + char(13) +
             '  [PREACT].[SOURCECODE],' + char(13) +
             '  [PREACT].[RECORDCOUNT],' + char(13) +
             '  [PREACT].[MAILINGNAME],' + char(13) +
             '  @PROCESSDATE as [PROCESSDATE],' + char(13) +
             '  [MKTSEGMENTATIONSEGMENT].[EXCLUDE]' + char(13) +
             'from dbo.[' + @TABLENAME + '] [PREACT]' + char(13) +
             'left outer join [MKTSEGMENTATIONSEGMENT] on [PREACT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]' + char(13) +
             'where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID' + char(13);

  insert into @COUNTS
    exec sp_executesql @SQL, N'@PROCESSDATE datetime, @SEGMENTATIONID uniqueidentifier', @PROCESSDATE = @PROCESSDATE, @SEGMENTATIONID = @SEGMENTATIONID;

  if not @REMOVEMEMBERSPROCESSSTATUSID is null
    begin
      set @TABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATEEXCLUSION_MAKETABLENAME](@SEGMENTATIONID);

      set @SQL = 'select' + char(13) +
                 '  [DATA].[SEGMENTID],' + char(13) +
                 '  count(*) as [RECORDCOUNT]' + char(13) +
                 'from dbo.[' + @TABLENAME + '] as [DATA]' + char(13) +
                 'inner join dbo.[MKTSEGMENTATIONEXCLUSION] on [MKTSEGMENTATIONEXCLUSION].[ID] = [DATA].[SEGMENTATIONEXCLUSIONID]' + char(13) +
                 'inner join dbo.[BUSINESSPROCESSSTATUS] on [BUSINESSPROCESSSTATUS].[ID] = [MKTSEGMENTATIONEXCLUSION].[STATUSID]' + char(13) +
                 'where [BUSINESSPROCESSSTATUS].[ENDEDON] <= @PROCESSDATE' + char(13) +
                 'group by [DATA].[SEGMENTID]';

      insert into @REMOVED
        exec sp_executesql @SQL, N'@PROCESSDATE datetime', @PROCESSDATE = @PROCESSDATE;
    end

  select
    [COUNTS].[SEGMENTID] as [SEGMENTID],
    [COUNTS].[SEGMENTNAME] as [SEGMENTNAME],
    [MKTSEGMENTLIST].[LISTID] as [LISTID],
    [COUNTS].[RECORDSOURCENAME] as [RECORDSOURCENAME],
    [COUNTS].[SOURCECODE] as [SOURCECODE],
    ([COUNTS].[RECORDCOUNT] - isnull([REMOVED].[RECORDCOUNT], 0)) as [RECORDCOUNT],
    [COUNTS].[MAILINGNAME] as [MAILINGNAME],
    [COUNTS].[PROCESSDATE] as [PROCESSDATE],
    [COUNTS].[EXCLUDE]
  from @COUNTS as [COUNTS]
  left outer join @REMOVED as [REMOVED] on [COUNTS].[SEGMENTID] = [REMOVED].[SEGMENTID]
  left join [MKTSEGMENTLIST] on [MKTSEGMENTLIST].[QUERYVIEWCATALOGID] = [COUNTS].[DONORVIEWID];

  return 0;