USP_MKTSEGMENTATIONACTIVATE_ROLLBACK

Rolls back the changes made while activating a marketing effort, if the activation fails.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@DELETEAPPEALINFO bit IN
@DEACTIVATE bit IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATIONACTIVATE_ROLLBACK]
(
  @SEGMENTATIONID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null,
  @DELETEAPPEALINFO bit = null,
  @DEACTIVATE bit = null
)
as
  set nocount on;

  declare @SQL nvarchar(max);
  declare @DATATABLENAME nvarchar(255);
  declare @MAILINGTYPECODE tinyint;
  declare @SOURCECODEISHISTORICAL bit;
  declare @MAILINGFAMILYTYPECODE tinyint;
  declare @ACTIVE bit;
  declare @CURRENTDATE datetime;
  declare @ISBBEC bit;
  declare @BBECAPPEALSYSTEMID nvarchar(36);
  declare @BBECRECORDSOURCEID uniqueidentifier;

  begin try
    if @CHANGEAGENTID is null
      exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

    set @CURRENTDATE = getdate();

    select
      @MAILINGTYPECODE = [MKTSEGMENTATION].[MAILINGTYPECODE],
      @MAILINGFAMILYTYPECODE = [MKTSEGMENTATION].[MAILINGFAMILYTYPECODE],
      @ACTIVE = [MKTSEGMENTATION].[ACTIVE],
      @SOURCECODEISHISTORICAL = [MKTSOURCECODE].[ISHISTORICAL],
      @DATATABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([MKTSEGMENTATION].[ID])
    from dbo.[MKTSEGMENTATION]
    left outer join dbo.[MKTSOURCECODE] on [MKTSOURCECODE].[ID] = [MKTSEGMENTATION].[SOURCECODEID]
    where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;

    if @MAILINGFAMILYTYPECODE = 3  --Other communications

      set @DELETEAPPEALINFO = 0;
    else if @DELETEAPPEALINFO is null
      set @DELETEAPPEALINFO = 1;

    if @DEACTIVATE is null
      set @DEACTIVATE = 0;

    set @BBECRECORDSOURCEID = dbo.[UFN_MKTRECORDSOURCE_GETFIRSTBBECRECORDSOURCEID]();
    set @ISBBEC = (case when dbo.[UFN_INSTALLEDPRODUCTS_PRODUCTIS]('BB9873D7-F1ED-430A-8AB4-F09F47056538') = 0 then 1 else 0 end);

    if @ISBBEC = 1
      select @BBECAPPEALSYSTEMID = [APPEALSYSTEMID]
      from dbo.[MKTSEGMENTATIONACTIVATE]
      where [SEGMENTATIONID] = @SEGMENTATIONID
      and [RECORDSOURCEID] = @BBECRECORDSOURCEID;


    /*********************************************************************/
    /* Clean up the activate table that holds the appeal information and */ 
    /* delete the normal and unresolved gift ID sets for the mailing.    */
    /*********************************************************************/
    declare @ACTIVATEID uniqueidentifier;
    declare @RECORDSOURCEID uniqueidentifier;
    declare @NORMALIDSETID uniqueidentifier;
    declare @NORMALIDSETTABLENAME nvarchar(255);
    declare @NORMALIDSETFUNCTIONNAME nvarchar(255);
    declare @NORMALIDSETFUNCTIONNAMEEXISTS nvarchar(255);
    declare @UNRESOLVEDIDSETID uniqueidentifier;
    declare @UNRESOLVEDIDSETTABLENAME nvarchar(255);
    declare @UNRESOLVEDIDSETFUNCTIONNAME nvarchar(255);
    declare @UNRESOLVEDIDSETFUNCTIONNAMEEXISTS nvarchar(255);
    declare @SEGMENTRECORDSOURCES table([ID] uniqueidentifier primary key);

    --Get all the current segment record sources for this mailing...

    insert into @SEGMENTRECORDSOURCES
      select [SRS].[QUERYVIEWCATALOGID]
      from dbo.[UFN_MKTSEGMENTATION_GETDISTINCTRECORDSOURCES](@SEGMENTATIONID) as [SRS];

    declare ACTIVATECURSOR cursor local fast_forward for
      select
        [MKTSEGMENTATIONACTIVATE].[ID],
        [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID],
        [MKTSEGMENTATIONACTIVATE].[NORMALGIFTIDSETREGISTERID],
        [NORMALIDSET].[DBOBJECTNAME],
        [MKTSEGMENTATIONACTIVATE].[UNRESOLVEDGIFTIDSETREGISTERID],
        [UNRESOLVEDIDSET].[DBOBJECTNAME]
      from dbo.[MKTSEGMENTATIONACTIVATE]
      left join dbo.[IDSETREGISTER] as [NORMALIDSET] on [NORMALIDSET].[ID] = [MKTSEGMENTATIONACTIVATE].[NORMALGIFTIDSETREGISTERID]
      left join dbo.[IDSETREGISTER] as [UNRESOLVEDIDSET] on [UNRESOLVEDIDSET].[ID] = [MKTSEGMENTATIONACTIVATE].[UNRESOLVEDGIFTIDSETREGISTERID]
      where [SEGMENTATIONID] = @SEGMENTATIONID;

    open ACTIVATECURSOR;
    fetch next from ACTIVATECURSOR into @ACTIVATEID, @RECORDSOURCEID, @NORMALIDSETID, @NORMALIDSETTABLENAME, @UNRESOLVEDIDSETID, @UNRESOLVEDIDSETTABLENAME;

    while (@@FETCH_STATUS = 0)
      begin
        update dbo.[MKTSEGMENTATIONACTIVATE] set
          [NORMALGIFTIDSETREGISTERID] = null,
          [UNRESOLVEDGIFTIDSETREGISTERID] = null,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [ID] = @ACTIVATEID;

        if @NORMALIDSETID is not null
          begin
            set @NORMALIDSETFUNCTIONNAME = 'UFN_' + @NORMALIDSETTABLENAME;
            set @NORMALIDSETFUNCTIONNAMEEXISTS = @NORMALIDSETFUNCTIONNAME + '_IDEXISTS';
            exec dbo.[USP_IDSET_DELETE] @NORMALIDSETFUNCTIONNAME, @NORMALIDSETFUNCTIONNAMEEXISTS;
            exec dbo.[USP_IDSET_DELETESTATICTABLE] @NORMALIDSETTABLENAME;
            exec dbo.[USP_IDSETREGISTER_DELETEBYID_WITHCHANGEAGENTID] @NORMALIDSETID, @CHANGEAGENTID;
          end

        if @UNRESOLVEDIDSETID is not null
          begin
            set @UNRESOLVEDIDSETFUNCTIONNAME = 'UFN_' + @UNRESOLVEDIDSETTABLENAME;
            set @UNRESOLVEDIDSETFUNCTIONNAMEEXISTS = @UNRESOLVEDIDSETFUNCTIONNAME + '_IDEXISTS';
            exec dbo.[USP_IDSET_DELETE] @UNRESOLVEDIDSETFUNCTIONNAME, @UNRESOLVEDIDSETFUNCTIONNAMEEXISTS;
            exec dbo.[USP_IDSET_DELETESTATICTABLE] @UNRESOLVEDIDSETTABLENAME;
            exec dbo.[USP_IDSETREGISTER_DELETEBYID_WITHCHANGEAGENTID] @UNRESOLVEDIDSETID, @CHANGEAGENTID;
          end

        if @ACTIVE = 0 and (@DELETEAPPEALINFO = 1 or not exists(select 1 from @SEGMENTRECORDSOURCES where [ID] = @RECORDSOURCEID))
          exec dbo.[USP_MKTSEGMENTATIONACTIVATE_DELETEBYID_WITHCHANGEAGENTID] @ACTIVATEID, @CHANGEAGENTID;

        fetch next from ACTIVATECURSOR into @ACTIVATEID, @RECORDSOURCEID, @NORMALIDSETID, @NORMALIDSETTABLENAME, @UNRESOLVEDIDSETID, @UNRESOLVEDIDSETTABLENAME;
      end

    close ACTIVATECURSOR;
    deallocate ACTIVATECURSOR;


    /*********************************************************************************/
    /* Delete all records from the sponsorship activated table.                      */
    /*********************************************************************************/
    delete from dbo.MKTSPONSORSHIPMAILINGTEMPLATEACTIVATED where MKTSEGMENTATIONID = @SEGMENTATIONID


    if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @DATATABLENAME)
      begin
        /**********************************************************************/
        /* Delete all constituent appeals for BBEC that may have been created */
        /**********************************************************************/
        if @ISBBEC = 1 and @BBECAPPEALSYSTEMID is not null and @BBECAPPEALSYSTEMID <> ''
          begin
            --Cache current context information

            declare @CONTEXTCACHE varbinary(128);
            set @CONTEXTCACHE = CONTEXT_INFO();

            --Set CONTEXT_INFO to @CHANGEAGENTID

            if @CHANGEAGENTID is not null
              set CONTEXT_INFO @CHANGEAGENTID;

            --Delete the constit appeals for this mailing

            delete from dbo.[CONSTITUENTAPPEAL]
            where [APPEALID] = @BBECAPPEALSYSTEMID
            and [MKTSEGMENTATIONID] = @SEGMENTATIONID
            and [MKTSEGMENTATIONSEGMENTID] is not null;

            --Reset CONTEXT_INFO to previous value

            if not @CONTEXTCACHE is null
              set CONTEXT_INFO @CONTEXTCACHE;
          end


        /*************************************************************************/
        /* Delete all list matchback data for imported and vendor managed lists. */
        /*************************************************************************/
        declare @NEEDSMATCHBACK bit;
        exec dbo.[USP_MKTSEGMENTATION_NEEDSMATCHBACK] @SEGMENTATIONID, @NEEDSMATCHBACK output;

        if @NEEDSMATCHBACK = 1
          exec dbo.[USP_MKTSEGMENTATION_MATCHBACKDELETE] @SEGMENTATIONID;
      end


    if @ACTIVE = 0 or @DEACTIVATE = 1
      begin
        /********************************************************/
        /* Remove any package cache information for the mailing */
        /********************************************************/
        update dbo.[MKTSEGMENTATIONPACKAGE] set
          [UNITCOST] = 0,
          [COSTDISTRIBUTIONMETHODCODE] = 0,
          [INSERTCOSTPERPIECE] = 0,
          [INSERTCOSTPERRESPONSE] = 0,
          [INSERTCOSTPEREFFORT] = 0,
          [CODE] = '',
          [CHANGEDBYID] = @CHANGEAGENTID
        where [SEGMENTATIONID] = @SEGMENTATIONID;


        /**************************************************************************************************/
        /* Remove any list segment snapshot information for the mailing created at the time of activation */
        /**************************************************************************************************/
        declare @SEGMENTATIONSEGMENTLISTID uniqueidentifier;
        declare SEGMENTLISTCURSOR cursor local fast_forward for
          select [MKTSEGMENTATIONSEGMENT].[ID]
          from dbo.[MKTSEGMENTATIONSEGMENT]
          inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
          where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
          and [MKTSEGMENTATIONSEGMENTLIST].[OVERRIDELISTCOSTS] = 0
          and [MKTSEGMENTATIONSEGMENTLIST].[OVERRIDEQUANTITIESANDORSEGMENTCOSTS] = 0;

        open SEGMENTLISTCURSOR;
        fetch next from SEGMENTLISTCURSOR into @SEGMENTATIONSEGMENTLISTID;

        while (@@FETCH_STATUS = 0)
        begin
          exec dbo.[USP_MKTSEGMENTATIONSEGMENTLIST_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTATIONSEGMENTLISTID, @CHANGEAGENTID;
          fetch next from SEGMENTLISTCURSOR into @SEGMENTATIONSEGMENTLISTID;
        end

        close SEGMENTLISTCURSOR;
        deallocate SEGMENTLISTCURSOR;


        /************************************************/
        /* Remove any KPIs associated with this mailing */
        /************************************************/
        declare @KPIRECORDTYPE uniqueidentifier;
        declare @KPIINSTANCEID uniqueidentifier;

        set @KPIRECORDTYPE = dbo.[UFN_RECORDTYPE_GETIDBYNAME]('Marketing Effort');

        declare KPICURSOR cursor local fast_forward for
          select [KPIINSTANCE].[ID]
          from dbo.[KPIINSTANCE]
          inner join dbo.[KPICATALOG] on [KPICATALOG].[ID] = [KPIINSTANCE].[KPICATALOGID]
          where [KPICATALOG].[CONTEXTRECORDTYPEID] = @KPIRECORDTYPE
          and [KPIINSTANCE].[CONTEXTRECORDID] = cast(@SEGMENTATIONID as nvarchar(100));

        open KPICURSOR;
        fetch next from KPICURSOR into @KPIINSTANCEID;

        while (@@FETCH_STATUS = 0)
          begin
            exec dbo.[USP_KPIINSTANCE_DELETE] @KPIINSTANCEID, @CHANGEAGENTID;
            fetch next from KPICURSOR into @KPIINSTANCEID;
          end

        close KPICURSOR;
        deallocate KPICURSOR;


        /************************************************************************/
        /* Remove any cached activated numbers for the mailing and its segments */
        /************************************************************************/
        --Delete the mailing cached numbers...

        exec dbo.[USP_MKTSEGMENTATIONACTIVE_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTATIONID, @CHANGEAGENTID;

        if @MAILINGTYPECODE = 2  --Membership cache

          exec dbo.[USP_MKTMEMBERSHIPMAILINGACTIVE_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTATIONID, @CHANGEAGENTID;

        --Delete the mailing segment's cached numbers...

        if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'MKTSEGMENTATIONSEGMENTACTIVE')
          begin
            declare @SEGMENTCACHEID uniqueidentifier;
            declare SEGMENTCACHECURSOR cursor local fast_forward for
              select [MKTSEGMENTATIONSEGMENTACTIVE].[ID]
              from dbo.[MKTSEGMENTATIONSEGMENT]
              inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on [MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
              where [SEGMENTATIONID] = @SEGMENTATIONID;

            open SEGMENTCACHECURSOR;
            fetch next from SEGMENTCACHECURSOR into @SEGMENTCACHEID;

            while (@@FETCH_STATUS = 0)
            begin
              exec dbo.[USP_MKTSEGMENTATIONSEGMENTACTIVE_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTCACHEID, @CHANGEAGENTID;

              if @MAILINGTYPECODE = 2
                exec dbo.[USP_MKTMEMBERSHIPMAILINGSEGMENTACTIVE_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTCACHEID, @CHANGEAGENTID;

              fetch next from SEGMENTCACHECURSOR into @SEGMENTCACHEID;
            end

            close SEGMENTCACHECURSOR;
            deallocate SEGMENTCACHECURSOR;
          end

        --Delete the list cache for the mailing...

        if @MAILINGTYPECODE = 0  --Only standard/appeal mailings can have lists

          begin
            declare @LISTCACHEID uniqueidentifier;
            declare LISTCACHECURSOR cursor local fast_forward for
              select [MKTSEGMENTATIONLISTACTIVE].[ID]
              from dbo.[MKTSEGMENTATIONLISTACTIVE]
              inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONLISTACTIVE].[SEGMENTID]
              where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;

            open LISTCACHECURSOR;
            fetch next from LISTCACHECURSOR into @LISTCACHEID;

            while (@@FETCH_STATUS = 0)
            begin
              exec dbo.[USP_MKTSEGMENTATIONLISTACTIVE_DELETEBYID_WITHCHANGEAGENTID] @LISTCACHEID, @CHANGEAGENTID;
              fetch next from LISTCACHECURSOR into @LISTCACHEID;
            end

            close LISTCACHECURSOR;
            deallocate LISTCACHECURSOR;
          end


        /****************************************************************************************************/
        /* Remove any cached revenue or constituent IDs in the REVENUESEGMENT and CONSTITUENTSEGMENT tables */
        /* Also remove any source analysis rule data for this mailing                                       */
        /****************************************************************************************************/
        --Loop through each record source in this mailing because we have a separate REVENUESEGMENT and CONSTITUENTSEGMENT table for each record source

        declare @REVENUESEGMENTTABLE nvarchar(128);
        declare @CONSTITUENTSEGMENTTABLE nvarchar(128);
        declare @SARTABLE nvarchar(128);
        declare @CACHESOURCEANALYSISRULEDATA bit;
        declare @SOURCEANALYSISRULEDATALASTCACHED datetime;

        declare RECORDSOURCECURSOR cursor local fast_forward for
          select [ID]
          from @SEGMENTRECORDSOURCES;

        open RECORDSOURCECURSOR;
        fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;

        while (@@FETCH_STATUS = 0)
          begin
            set @REVENUESEGMENTTABLE = dbo.[UFN_REVENUESEGMENT_MAKETABLENAME](@RECORDSOURCEID);
            if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @REVENUESEGMENTTABLE)
              begin
                --Remove all the existing revenue IDs from the REVENUESEGMENT table for this mailing...

                set @SQL = 'delete from dbo.[' + @REVENUESEGMENTTABLE + ']' + char(13) +
                           'where [SEGMENTID] in (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID)';
                exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID;
              end

            set @CONSTITUENTSEGMENTTABLE = dbo.[UFN_CONSTITUENTSEGMENT_MAKETABLENAME](@RECORDSOURCEID);
            if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @CONSTITUENTSEGMENTTABLE)
              begin
                --Remove all the existing constituent IDs from the CONSTITUENTSEGMENT table for this mailing...

                set @SQL = 'delete from dbo.[' + @CONSTITUENTSEGMENTTABLE + ']' + char(13) +
                           'where [SEGMENTID] in (select [ID] from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID)';
                exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID;
              end

            set @SARTABLE = dbo.[UFN_MKTSOURCEANALYSISRULE_MAKETABLENAME](@RECORDSOURCEID);
            if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @SARTABLE)
              begin
                --Because SAR can be calculated before activation now, we cannot blindly wipe out the SAR table during this rollback.

                --Instead, we can only do this delete if the SAR options allows us to.

                select
                  @CACHESOURCEANALYSISRULEDATA = [CACHESOURCEANALYSISRULEDATA]
                from dbo.[MKTSEGMENTATIONACTIVATEPROCESS]
                where [SEGMENTATIONID] = @SEGMENTATIONID;

                select
                  @SOURCEANALYSISRULEDATALASTCACHED = [SOURCEANALYSISRULEDATALASTCACHED]
                from dbo.[MKTSEGMENTATIONSEGMENTCALCULATEPROCESS]
                where [SEGMENTATIONID] = @SEGMENTATIONID;

                if @CACHESOURCEANALYSISRULEDATA = 1 or @SOURCEANALYSISRULEDATALASTCACHED is null
                  begin
                    --Remove all the existing source analysis data for this mailing...

                    set @SQL = 'delete from dbo.[' + @SARTABLE + ']' + char(13) +
                               'where [MAILINGID] = @SEGMENTATIONID';
                    exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID;
                  end
              end

            fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;
          end

        close RECORDSOURCECURSOR;
        deallocate RECORDSOURCECURSOR;


        if @SOURCECODEISHISTORICAL = 0
          begin
            /************************************************/
            /* Remove the cached list codes for the mailing */
            /************************************************/
            declare @SOURCECODEPARTID uniqueidentifier;
            declare SOURCECODEPARTCURSOR cursor local fast_forward for
              select [ID]
              from dbo.[MKTSOURCECODEPART]
              where [SEGMENTATIONID] = @SEGMENTATIONID
              and [LISTID] is not null;

            open SOURCECODEPARTCURSOR;
            fetch next from SOURCECODEPARTCURSOR into @SOURCECODEPARTID;

            while (@@FETCH_STATUS = 0)
              begin
                exec dbo.[USP_MKTSOURCECODEPART_DELETEBYID_WITHCHANGEAGENTID] @SOURCECODEPARTID, @CHANGEAGENTID;
                fetch next from SOURCECODEPARTCURSOR into @SOURCECODEPARTID;
              end

            close SOURCECODEPARTCURSOR;
            deallocate SOURCECODEPARTCURSOR;


            /**********************************************************/
            /* Remove the cached source code mappings for the mailing */
            /**********************************************************/
            declare @SOURCECODEMAPID uniqueidentifier;
            declare SOURCECODEMAPCURSOR cursor local fast_forward for
              select [ID]
              from dbo.[MKTSOURCECODEMAP]
              where [SEGMENTATIONID] = @SEGMENTATIONID
              and [WHITEMAILSEGMENTID] is null;

            open SOURCECODEMAPCURSOR;
            fetch next from SOURCECODEMAPCURSOR into @SOURCECODEMAPID;

     while (@@FETCH_STATUS = 0)
              begin
                exec dbo.[USP_MKTSOURCECODEMAP_DELETEBYID_WITHCHANGEAGENTID] @SOURCECODEMAPID, @CHANGEAGENTID;
                fetch next from SOURCECODEMAPCURSOR into @SOURCECODEMAPID;
              end

            close SOURCECODEMAPCURSOR;
            deallocate SOURCECODEMAPCURSOR;
          end

        /**********************************************************************************************************/
        /* Deactivate Mailing                                                                                     */
        /* The code inside this block is meant to completely deactivate the mailing (if possible).  Only add code */
        /* below if it is specific to deactivating a mailing and not simply rolling back a failed activation.     */
        /**********************************************************************************************************/
        if @DEACTIVATE = 1
          begin
            /****************************************************/
            /* Delete the mailing refresh process, if it exists */
            /****************************************************/
            declare @MKTSEGMENTATIONREFRESHPROCESSID uniqueidentifier;

            select
              @MKTSEGMENTATIONREFRESHPROCESSID = [ID]
            from dbo.[MKTSEGMENTATIONREFRESHPROCESS]
            where [SEGMENTATIONID] = @SEGMENTATIONID;

            if @MKTSEGMENTATIONREFRESHPROCESSID is not null
              exec dbo.[USP_MKTSEGMENTATIONREFRESHPROCESS_DELETEBYID_WITHCHANGEAGENTID] @MKTSEGMENTATIONREFRESHPROCESSID, @CHANGEAGENTID;


            /********************************************************************************************/
            /* Add the mailing preactivation process back (a.k.a. Mailing Record Counts report process) */
            /********************************************************************************************/
            if not exists(select 1 from dbo.[MKTMAILINGPREACTIVATIONPROCESS] where [SEGMENTATIONID] = @SEGMENTATIONID)
              insert into dbo.[MKTMAILINGPREACTIVATIONPROCESS] (
                [ID],
                [SEGMENTATIONID],
                [ADDEDBYID],
                [CHANGEDBYID],
                [DATEADDED],
                [DATECHANGED]
              ) values (
                NewID(),
                @SEGMENTATIONID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
              );


            /**************************************************/
            /* Add the mailing selection refresh process back */
            /**************************************************/
            if @MAILINGTYPECODE not in (1, 4)
              exec dbo.[USP_MKTSEGMENTATIONSEGMENTREFRESHPROCESS_SAVE] @SEGMENTATIONID, @CHANGEAGENTID;


            /************************************************************************************/
            /* Add the mailing EffortExclusions process back (a.k.a. Exclusions report process) */
            /************************************************************************************/
            exec dbo.[USP_MKTSEGMENTATION_EFFORTEXCLUSIONSPROCESS_SAVE] @SEGMENTATIONID, @CHANGEAGENTID;


            /*****************************************************************************************************/
            /* If this is a test mailing, then try to remove the test mailing from all other mailing's exclusion */
            /* filters.  This can only work if the test mailing is not being used by another activated mailing.  */
            /*****************************************************************************************************/
            declare @PARENTSEGMENTATIONID uniqueidentifier;
            declare @MKTSEGMENTATIONFILTERSEGMENTATIONID uniqueidentifier;

            select
              @PARENTSEGMENTATIONID = [PARENTSEGMENTATIONID]
            from dbo.[MKTSEGMENTATION]
            where [ID] = @SEGMENTATIONID;

            if @PARENTSEGMENTATIONID is not null
              begin
                if exists(select 1 from dbo.[MKTSEGMENTATIONFILTERSEGMENTATION] inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONFILTERSEGMENTATION].[SEGMENTATIONID] where [MKTSEGMENTATIONFILTERSEGMENTATION].[PREVIOUSSEGMENTATIONID] = @PARENTSEGMENTATIONID and [MKTSEGMENTATION].[ACTIVE] = 1)
                  raiserror('The test marketing effort cannot be deactivated because one or more marketing efforts are activated using this test marketing effort as an exclusion.', 13, 1);

                declare PREVIOUSMAILINGCURSOR cursor local fast_forward for
                  select [ID]
                  from dbo.[MKTSEGMENTATIONFILTERSEGMENTATION]
                  where [PREVIOUSSEGMENTATIONID] = @PARENTSEGMENTATIONID;

                open PREVIOUSMAILINGCURSOR;
                fetch next from PREVIOUSMAILINGCURSOR into @MKTSEGMENTATIONFILTERSEGMENTATIONID;

                while (@@FETCH_STATUS = 0)
                begin
                  exec dbo.[USP_MKTSEGMENTATIONFILTERSEGMENTATION_DELETEBYID_WITHCHANGEAGENTID] @MKTSEGMENTATIONFILTERSEGMENTATIONID, @CHANGEAGENTID;
                  fetch next from PREVIOUSMAILINGCURSOR into @MKTSEGMENTATIONFILTERSEGMENTATIONID;
                end

                close PREVIOUSMAILINGCURSOR;
                deallocate PREVIOUSMAILINGCURSOR;
              end


            /***********************************************/
            /* Truncate the address processing cache table */
            /***********************************************/
            declare @ADDRESSCACHETABLENAME nvarchar(128) = dbo.[UFN_MKTSEGMENTATIONSEGMENTCACHEADDRESSES_MAKETABLENAME](@SEGMENTATIONID);
            if exists(select * from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @ADDRESSCACHETABLENAME)
              begin
                set @SQL = 'truncate table dbo.[' + @ADDRESSCACHETABLENAME + ']';
                exec (@SQL);
              end


            /*****************************************************/
            /* Truncate the email address processing cache table */
            /*****************************************************/
            declare @EMAILADDRESSCACHETABLENAME nvarchar(128) = dbo.[UFN_MKTSEGMENTATIONSEGMENTCACHEEMAILADDRESSES_MAKETABLENAME](@SEGMENTATIONID);
            if exists(select * from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @EMAILADDRESSCACHETABLENAME)
              begin
                set @SQL = 'truncate table dbo.[' + @EMAILADDRESSCACHETABLENAME + ']';
                exec (@SQL);
              end


            /***********************************/
            /* Truncate the mailing data table */
            /***********************************/
            exec dbo.[USP_MKTSEGMENTATION_TRUNCATEDATATABLE] @SEGMENTATIONID;


            /*************************************************/
            /* Remove all system-defined findernumber ranges */
            /*************************************************/
            declare @MKTSEGMENTATIONFINDERNUMBERID uniqueidentifier;

            declare FINDERNUMBERRANGECURSOR cursor local fast_forward for
              select [ID]
              from dbo.[MKTSEGMENTATIONFINDERNUMBER]
              where [SEGMENTATIONID] = @SEGMENTATIONID
              and [ISRESERVED] = 0;

            open FINDERNUMBERRANGECURSOR;
            fetch next from FINDERNUMBERRANGECURSOR into @MKTSEGMENTATIONFINDERNUMBERID;

            while (@@FETCH_STATUS = 0)
              begin
                exec dbo.[USP_MKTSEGMENTATIONFINDERNUMBER_DELETE] @MKTSEGMENTATIONFINDERNUMBERID, @CHANGEAGENTID;
                fetch next from FINDERNUMBERRANGECURSOR into @MKTSEGMENTATIONFINDERNUMBERID;
              end

            close FINDERNUMBERRANGECURSOR;
            deallocate FINDERNUMBERRANGECURSOR;


            /*******************************/
            /* Reset fields on the mailing */
            /*******************************/
            update dbo.[MKTSEGMENTATION] set
              [ACTIVE] = 0,
              [ACTIVATEDATE] = null,
              [CHANGEDBYID] = @CHANGEAGENTID,
              [DATECHANGED] = @CURRENTDATE
            where [ID] = @SEGMENTATIONID;
          end
      end

  end try

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

  return 0;