USP_MKTSEGMENTATION_DELETE

Executes the "Marketing Effort: 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_MKTSEGMENTATION_DELETE]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier
)
as
  set nocount on;

  declare @ACTIVE bit;
  declare @MAILINGTYPECODE tinyint;
  declare @ISHISTORICAL bit;
  declare @SOURCECODEISHISTORICAL bit;
  declare @SQL nvarchar(max);
  declare @DATATABLENAME nvarchar(128);

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

    if @ACTIVE = 0
      begin
        --Check if the mailing is currently being activated...

        exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @ID;

        /* If the mailing is NOT active, then run through the manual rollback process just to make sure that */
        /* a previous failed activation did not leave some artifacts in the database.  This should not       */
        /* affect anything if the mailing did NOT previously fail during an activation.                      */
        exec dbo.[USP_MKTSEGMENTATIONACTIVATE_ROLLBACK] @ID, @CHANGEAGENTID;

        /* Clear out the segment count cache tables */
        exec dbo.[USP_MKTSEGMENTATION_CLEARCACHE] @ID, 0;
      end

    /* Check if the activated table exists before we try dropping it and matchback info, just a safety check */
    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 dbo.[UFN_INSTALLEDPRODUCTS_PRODUCTIS]('BB9873D7-F1ED-430A-8AB4-F09F47056538') = 0
          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 [MKTSEGMENTATIONID] = @ID;

            --Delete the finder number constit appeals for this mailing

            delete from dbo.[MKTFINDERNUMBERCONSTITUENTAPPEAL]
            where [MKTSEGMENTATIONID] = @ID;

            --Delete the batch finder number constit appeals for this mailing

            delete from dbo.[BATCHREVENUECONSTITUENTAPPEAL]
            where [MKTSEGMENTATIONID] = @ID;

            --Reset CONTEXT_INFO to previous value

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

        /**********************************************************************/
        /* Delete any finder file information that may have been created      */
        /**********************************************************************/
        declare @FINDERFILETABLE nvarchar(256);

        set @FINDERFILETABLE = dbo.[UFN_MKTFINDERFILE_BUILDTABLENAME](@ID);

        --Drop the finder file table for the mailing

        if exists(select 1 from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @FINDERFILETABLE)
          begin
            set @SQL = 'drop table dbo.[' + @FINDERFILETABLE + '];'
            exec (@SQL);
          end

        --Delete finder file record

        declare @FINDERFILEIMPORTPROCESSID uniqueidentifier;
        declare FINDERFILECURSOR cursor local fast_forward for
          select [ID]
          from dbo.[MKTFINDERFILEIMPORTPROCESS]
          where [SEGMENTATIONID] = @ID;

        open FINDERFILECURSOR;
        fetch next from FINDERFILECURSOR into @FINDERFILEIMPORTPROCESSID;

        while (@@fetch_status = 0)
          begin
            exec dbo.[USP_MKTFINDERFILEIMPORTPROCESS_DELETEBYID_WITHCHANGEAGENTID] @FINDERFILEIMPORTPROCESSID, @CHANGEAGENTID;
            fetch next from FINDERFILECURSOR into @FINDERFILEIMPORTPROCESSID;
          end

        close FINDERFILECURSOR;
        deallocate FINDERFILECURSOR;

        /*********************************************************************/
        /* Delete the activated exclusiontable and remove any selections     */
        /*********************************************************************/
        if exists (select 1 from dbo.[MKTSEGMENTATIONEXCLUSION] where [SEGMENTATIONID] = @ID)
          begin
            /* Delete activated mailing exclusion table */
            declare @EXCLUSIONTABLENAME nvarchar(128) = dbo.[UFN_MKTSEGMENTATIONACTIVATEEXCLUSION_MAKETABLENAME](@ID);
            set @SQL = 'drop table dbo.[' + @EXCLUSIONTABLENAME + ']';
            exec (@SQL);

            /* Delete any selections created for the post activation exclusions */
            declare @SEGMENTATIONEXCLUSIONID uniqueidentifier;
            declare MAILINGCURSOR cursor local fast_forward for
              select [ID]
              from dbo.[MKTSEGMENTATIONEXCLUSION]
              where [SEGMENTATIONID] = @ID;

            open MAILINGCURSOR;
            fetch next from MAILINGCURSOR into @SEGMENTATIONEXCLUSIONID;

            while (@@FETCH_STATUS = 0)
            begin
              /* Delete selections */
              declare @IDSETREGISTERID uniqueidentifier;
              declare @IDSETTABLENAME nvarchar(255);
              declare @IDSETFUNCTIONNAME nvarchar(255);
              declare @IDSETFUNCTIONNAMEEXISTS nvarchar(255);

              declare IDSETCURSOR cursor local fast_forward for
                select [IDSETREGISTER].[ID], [IDSETREGISTER].[DBOBJECTNAME]
                from dbo.[MKTSEGMENTATIONEXCLUSIONSELECTION] [SELECTION]
                inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [SELECTION].[IDSETREGISTERID]
                where [SELECTION].[SEGMENTATIONEXCLUSIONID] = @SEGMENTATIONEXCLUSIONID;

              open IDSETCURSOR;
              fetch next from IDSETCURSOR into @IDSETREGISTERID, @IDSETTABLENAME;

              while (@@FETCH_STATUS = 0)
              begin
                --Check if the selection is in use by an ad-hoc query...

                if exists(select * from dbo.[ADHOCQUERY] where dbo.[UFN_ADHOCQUERY_IDSETINUSE](@IDSETREGISTERID, [QUERYDEFINITIONXML]) = 1)
                  begin
                    raiserror('BBERR_IDSET_REMOVEMEMBERS_INUSEBYADHOCQUERY', 4, 43);
                    raiserror('The marketing effort cannot be deleted because one of its removed member selections is in use by an ad-hoc query.', 16, 1);
                  end

                set @IDSETFUNCTIONNAME = 'UFN_' + @IDSETTABLENAME;
                set @IDSETFUNCTIONNAMEEXISTS = @IDSETFUNCTIONNAME + '_IDEXISTS';
                exec dbo.[USP_IDSET_DELETE] @IDSETFUNCTIONNAME, @IDSETFUNCTIONNAMEEXISTS;
                exec dbo.[USP_IDSET_DELETESTATICTABLE] @IDSETTABLENAME;
                exec dbo.[USP_IDSETREGISTER_DELETEBYID_WITHCHANGEAGENTID] @IDSETREGISTERID, @CHANGEAGENTID;

                fetch next from IDSETCURSOR into @IDSETREGISTERID, @IDSETTABLENAME;
              end

              close IDSETCURSOR;
              deallocate IDSETCURSOR;

              /* Delete the post activation exclusions */
              exec dbo.[USP_MKTSEGMENTATIONEXCLUSION_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTATIONEXCLUSIONID, @CHANGEAGENTID;

              fetch next from MAILINGCURSOR into @SEGMENTATIONEXCLUSIONID;
            end

            close MAILINGCURSOR;
            deallocate MAILINGCURSOR;
          end

        /*********************************************************************/
        /* Delete the activated datatable and remove any list matchback info */
        /*********************************************************************/
        /* Delete the activated mailing table, must be done before deleting segments because of foreign key constraints.  */
        /* Also doing this before we delete matchback info will save some time too, because the matchback delete won't be */
        /* removing single rows from the activated table.                                                                 */
        set @SQL = 'drop table dbo.[' + @DATATABLENAME + ']';
        exec (@SQL);

        /* Now delete the matchback info, after we have deleted the activated table. */
        exec dbo.[USP_MKTSEGMENTATION_MATCHBACKDELETE] @ID;
      end


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

    declare @RECORDSOURCEID uniqueidentifier;
    declare RECORDSOURCECURSOR cursor local fast_forward for
      select [QUERYVIEWCATALOGID]
      from dbo.[UFN_MKTSEGMENTATION_GETDISTINCTRECORDSOURCES](@ID);

    open RECORDSOURCECURSOR;
    fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;

    while (@@FETCH_STATUS = 0)
      begin
        if @ACTIVE = 1
          begin  
            --Remove all the existing revenue IDs from the REVENUESEGMENT table for this mailing...

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

            --Remove all the existing constituent IDs from the CONSTITUENTSEGMENT table for this mailing...

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

        --Remove all data from the source analysis rule data table for each segment in this mailing

        if exists(select 1 from sys.tables where [name] = dbo.[UFN_MKTSOURCEANALYSISRULE_MAKETABLENAME](@RECORDSOURCEID))
          begin
            set @SQL = 'delete from dbo.[' + dbo.[UFN_MKTSOURCEANALYSISRULE_MAKETABLENAME](@RECORDSOURCEID) + ']' + char(13) +
                       'where [MAILINGID] = @SEGMENTATIONID';
            exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @ID;
          end

        fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;
      end

    close RECORDSOURCECURSOR;
    deallocate RECORDSOURCECURSOR;


    if @ACTIVE = 1
      begin
        /************************************************/
        /* 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(@ID 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 before we delete the segments below */
        /************************************************************************************************************/
        --Delete the mailing cached numbers...

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

        if @MAILINGTYPECODE = 2  --Membership cache

          exec dbo.[USP_MKTMEMBERSHIPMAILINGACTIVE_DELETEBYID_WITHCHANGEAGENTID] @ID, @CHANGEAGENTID;
        else if @MAILINGTYPECODE = 3
          --TODO: Not sure this is the right place for this?  Also needs to be written using a delete USP instead.

          delete from dbo.MKTSPONSORSHIPMAILINGTEMPLATEACTIVATED where MKTSEGMENTATIONID = @ID;

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

        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] = @ID;

        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;
            else if @MAILINGTYPECODE = 3
              --TODO: Not sure this is the right place for this?  Also needs to be written using a delete USP instead.

              delete from dbo.MKTSPONSORSHIPMAILINGTEMPLATEACTIVATED where MKTSEGMENTATIONID = @SEGMENTCACHEID;

            fetch next from SEGMENTCACHECURSOR into @SEGMENTCACHEID;
          end

        close SEGMENTCACHECURSOR;
        deallocate SEGMENTCACHECURSOR;

        --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] = @ID;

            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


        /*****************************************************************/
        /* Disassociate white mail segments associated with the mailing. */
        /*****************************************************************/
        declare @WHITEMAILSEGMENTID uniqueidentifier;
        declare WHITEMAILSEGMENTCURSOR cursor local fast_forward for
          select [ID]
          from dbo.[MKTSEGMENTWHITEMAIL]
          where [SEGMENTATIONID] = @ID;

        open WHITEMAILSEGMENTCURSOR;
        fetch next from WHITEMAILSEGMENTCURSOR into @WHITEMAILSEGMENTID;

        while (@@FETCH_STATUS = 0)
          begin
            update dbo.[MKTSEGMENTWHITEMAIL] set 
              [SEGMENTATIONID] = null
              [CHANGEDBYID] = @CHANGEAGENTID
            where [ID] = @WHITEMAILSEGMENTID;

            exec dbo.[USP_MKTSEGMENTWHITEMAIL_UPDATESOURCECODEMAP] @WHITEMAILSEGMENTID, @CHANGEAGENTID;

            fetch next from WHITEMAILSEGMENTCURSOR into @WHITEMAILSEGMENTID;
          end

        close WHITEMAILSEGMENTCURSOR;
        deallocate WHITEMAILSEGMENTCURSOR;
      end


    if @ACTIVE = 1 or (@ISHISTORICAL = 1 and @SOURCECODEISHISTORICAL = 1)
      begin
        /*********************************************/
        /* Delete the mailing's cached source codes. */
        /*********************************************/
        declare @SOURCECODEMAPID uniqueidentifier;
        declare SOURCECODEMAPCURSOR cursor local fast_forward for
          select [ID]
          from dbo.[MKTSOURCECODEMAP]
          where [SEGMENTATIONID] = @ID
          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


    -- delete the Marketing Effort Selection Refresh Process business process parameter set

    declare @MKTSEGMENTATIONSEGMENTREFRESHPROCESSID uniqueidentifier;

    select @MKTSEGMENTATIONSEGMENTREFRESHPROCESSID = [ID]
    from dbo.[MKTSEGMENTATIONSEGMENTREFRESHPROCESS]
    where [SEGMENTATIONID] = @ID;

    if @MKTSEGMENTATIONSEGMENTREFRESHPROCESSID is not null
      exec dbo.[USP_MKTSEGMENTATIONSEGMENTREFRESHPROCESS_DELETEBYID_WITHCHANGEAGENTID] @MKTSEGMENTATIONSEGMENTREFRESHPROCESSID, @CHANGEAGENTID


    -- delete the Mailing Segment Record Count Calculation business process parameter set

    declare @MKTSEGMENTATIONSEGMENTCALCULATEPROCESSID uniqueidentifier;

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

    exec dbo.[USP_MKTSEGMENTATIONSEGMENTCALCULATEPROCESS_DELETEBYID_WITHCHANGEAGENTID] @MKTSEGMENTATIONSEGMENTCALCULATEPROCESSID, @CHANGEAGENTID


    /*****************************************************************************/
    /* Delete each segment individually so the views get removed, and in reverse */
    /* order so it doesn't have to regenerate other segment views.               */
    /*****************************************************************************/
    declare @SEGMENTID uniqueidentifier;
    declare SEGMENTCURSOR cursor local fast_forward for
      select [ID]
      from dbo.[MKTSEGMENTATIONSEGMENT]
      where [SEGMENTATIONID] = @ID
      order by [SEQUENCE] desc;

    open SEGMENTCURSOR;
    fetch next from SEGMENTCURSOR into @SEGMENTID;

    while (@@FETCH_STATUS = 0)
      begin
        exec dbo.[USP_MKTSEGMENTATIONSEGMENT_DELETE] @SEGMENTID, @CHANGEAGENTID;
        fetch next from SEGMENTCURSOR into @SEGMENTID;
      end;

    close SEGMENTCURSOR;
    deallocate SEGMENTCURSOR;

    /************************************************************/
    /* Remove references to sponsorship template if test effort */
    /************************************************************/
    declare @MKTSPONSORSHIPMAILINGPROCESSSEGMENTATIONID uniqueidentifier;
    declare @ISTESTEFFORT bit = (select case when [PARENTSEGMENTATIONID] is not null then 1 else 0 end from dbo.[MKTSEGMENTATION] where [ID] = @ID);

    if @MAILINGTYPECODE = 3 and @ISTESTEFFORT = 1
      begin          
        select 
          @MKTSPONSORSHIPMAILINGPROCESSSEGMENTATIONID = [ID]
        from dbo.[MKTSPONSORSHIPMAILINGPROCESSSEGMENTATION] where [SEGMENTATIONID] = @ID;

        exec dbo.[USP_MKTSPONSORSHIPMAILINGPROCESSSEGMENTATION_DELETEBYID_WITHCHANGEAGENTID] @MKTSPONSORSHIPMAILINGPROCESSSEGMENTATIONID, @CHANGEAGENTID;  
      end

    /****************************/
    /* Delete each test mailing */
    /****************************/
    declare @TESTID uniqueidentifier;
    declare @TESTFILTERID uniqueidentifier;
    declare TESTCURSOR cursor local fast_forward for
      select
        [MKTSEGMENTATION].[ID],
        [MKTSEGMENTATIONFILTERSEGMENTATION].[ID]
      from dbo.[MKTSEGMENTATION]
      left join dbo.[MKTSEGMENTATIONFILTERSEGMENTATION] on [MKTSEGMENTATIONFILTERSEGMENTATION].[SEGMENTATIONID] = [MKTSEGMENTATION].[PARENTSEGMENTATIONID] and [MKTSEGMENTATIONFILTERSEGMENTATION].[PREVIOUSSEGMENTATIONID] = [MKTSEGMENTATION].[ID]
      where [MKTSEGMENTATION].[PARENTSEGMENTATIONID] = @ID
      order by [MKTSEGMENTATION].[ACTIVATEDATE] desc;

    open TESTCURSOR;
    fetch next from TESTCURSOR into @TESTID, @TESTFILTERID;

    while (@@FETCH_STATUS = 0)
    begin
      -- clear out all the filter references --

      if @TESTFILTERID is not null
        exec dbo.[USP_MKTSEGMENTATIONFILTERSEGMENTATION_DELETEBYID_WITHCHANGEAGENTID] @TESTFILTERID, @CHANGEAGENTID;

      if @MAILINGTYPECODE = 3
        begin
          -- remove references to the sponsorship template           

          select  @MKTSPONSORSHIPMAILINGPROCESSSEGMENTATIONID = [ID] from dbo.[MKTSPONSORSHIPMAILINGPROCESSSEGMENTATION] where [SEGMENTATIONID] = @TESTID;

          exec dbo.[USP_MKTSPONSORSHIPMAILINGPROCESSSEGMENTATION_DELETEBYID_WITHCHANGEAGENTID] @MKTSPONSORSHIPMAILINGPROCESSSEGMENTATIONID, @CHANGEAGENTID;  
        end

      -- delete the test mailing

      exec dbo.[USP_MKTSEGMENTATION_DELETE] @TESTID, @CHANGEAGENTID;

      fetch next from TESTCURSOR into @TESTID, @TESTFILTERID;
    end

    close TESTCURSOR;
    deallocate TESTCURSOR;


    /*******************************************************************************/
    /* Delete any segmented house file information that may have been created      */
    /*******************************************************************************/
    if dbo.[UFN_MKTCONSTITUENTFILEIMPORT_IMPORTTABLEEXISTS](@ID) = 1
      begin
        set @SQL = 'drop table dbo.[' + dbo.[UFN_MKTCONSTITUENTFILEIMPORT_BUILDTABLENAME](@ID) + '];'
        exec (@SQL);
      end


    if @ACTIVE = 1
      begin
        /*****************************************************/
        /* Delete the gift ID sets for the activated mailing */
        /*****************************************************/
        declare @ACTIVATEID uniqueidentifier;
        declare @NORMALGIFTIDSETREGISTERID uniqueidentifier;
        declare @NORMALIDSETTABLENAME nvarchar(255);
        declare @NORMALIDSETFUNCTIONNAME nvarchar(255);
        declare @NORMALIDSETFUNCTIONNAMEEXISTS nvarchar(255);
        declare @UNRESOLVEDGIFTIDSETREGISTERID uniqueidentifier;
        declare @UNRESOLVEDIDSETTABLENAME nvarchar(255);
        declare @UNRESOLVEDIDSETFUNCTIONNAME nvarchar(255);
        declare @UNRESOLVEDIDSETFUNCTIONNAMEEXISTS nvarchar(255);

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

        open ACTIVATECURSOR;
        fetch next from ACTIVATECURSOR into @ACTIVATEID, @NORMALGIFTIDSETREGISTERID, @NORMALIDSETTABLENAME, @UNRESOLVEDGIFTIDSETREGISTERID, @UNRESOLVEDIDSETTABLENAME;

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

          /* Delete the gift ID sets for the activated mailing */
          if @NORMALGIFTIDSETREGISTERID is not null
            begin
              --Check if the selection is in use by an ad-hoc query...

              if exists(select * from dbo.[ADHOCQUERY] where dbo.[UFN_ADHOCQUERY_IDSETINUSE](@NORMALGIFTIDSETREGISTERID, [QUERYDEFINITIONXML]) = 1)
                begin
                  raiserror('BBERR_IDSET_NORMALGIFTS_INUSEBYADHOCQUERY', 13, 1);
                  raiserror('The marketing effort cannot be deleted because the normal gifts selection is in use by an ad-hoc query.', 4, 44);
                end

              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] @NORMALGIFTIDSETREGISTERID, @CHANGEAGENTID;
            end

          if @UNRESOLVEDGIFTIDSETREGISTERID is not null
            begin
              --Check if the selection is in use by an ad-hoc query...

              if exists(select * from dbo.[ADHOCQUERY] where dbo.[UFN_ADHOCQUERY_IDSETINUSE](@UNRESOLVEDGIFTIDSETREGISTERID, [QUERYDEFINITIONXML]) = 1)
                begin
                  raiserror('BBERR_IDSET_UNRESOLVEDGIFTS_INUSEBYADHOCQUERY', 13, 1);
                  raiserror('The marketing effort cannot be deleted because the unresolved gifts selection is in use by an ad-hoc query.', 4, 45);
                end

              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] @UNRESOLVEDGIFTIDSETREGISTERID, @CHANGEAGENTID;
            end

          fetch next from ACTIVATECURSOR into @ACTIVATEID, @NORMALGIFTIDSETREGISTERID, @NORMALIDSETTABLENAME, @UNRESOLVEDGIFTIDSETREGISTERID, @UNRESOLVEDIDSETTABLENAME;
        end

        close ACTIVATECURSOR;
        deallocate ACTIVATECURSOR;
      end


    /*********************************************/
    /* Drop the address cache table if it exists */
    /*********************************************/
    declare @ADDRESSCACHETABLENAME nvarchar(128);
    set @ADDRESSCACHETABLENAME = dbo.[UFN_MKTSEGMENTATIONSEGMENTCACHEADDRESSES_MAKETABLENAME](@ID);

    if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @ADDRESSCACHETABLENAME)
      exec ('drop table dbo.[' + @ADDRESSCACHETABLENAME + ']');

    /***************************************************/
    /* Drop the email address cache table if it exists */
    /***************************************************/
    declare @EMAILADDRESSCACHETABLENAME nvarchar(128);
    set @EMAILADDRESSCACHETABLENAME = dbo.[UFN_MKTSEGMENTATIONSEGMENTCACHEEMAILADDRESSES_MAKETABLENAME](@ID);

    if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @EMAILADDRESSCACHETABLENAME)
      exec ('drop table dbo.[' + @EMAILADDRESSCACHETABLENAME + ']');


    /********************************************************/
    /* Delete any html to docx merge process parameter sets */
    /* associated with this segmentation.                   */
    /********************************************************/
    delete from dbo.HTMLTEMPLATETODOCXMERGEPROCESS
    where HTMLTEMPLATETODOCXMERGEPROCESS.ID in (
      select HTMLTEMPLATETODOCXMERGEPROCESS.ID
      from dbo.HTMLTEMPLATETODOCXMERGEPROCESS
      inner join dbo.MKTSEGMENTATIONEXPORTPROCESSSTATUS on MKTSEGMENTATIONEXPORTPROCESSSTATUS.ID = HTMLTEMPLATETODOCXMERGEPROCESS.MKTSEGMENTATIONEXPORTPROCESSSTATUSID
      inner join dbo.MKTSEGMENTATIONEXPORTPROCESS on MKTSEGMENTATIONEXPORTPROCESS.ID = MKTSEGMENTATIONEXPORTPROCESSSTATUS.PARAMETERSETID
      where MKTSEGMENTATIONEXPORTPROCESS.SEGMENTATIONID = @ID
    );

    /***************************************************************************/
    /* Clean up MKTMEMBERSHIPRENEWALEFFORTMAILINGPROCESS table before delete   */
    /* the record in MKTSEGMENTATION table to prevent FK constraint error.     */
    /***************************************************************************/
    declare @CURRENTDATE datetime;
    set @CURRENTDATE = GetDate();

    update dbo.MKTMEMBERSHIPRENEWALEFFORTMAILINGPROCESS set
      SEGMENTATIONEXPORTPROCESSSTATUSID = null,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
    from dbo.MKTMEMBERSHIPRENEWALEFFORTMAILINGPROCESS RENEWALPROCESS
    inner join dbo.MKTSEGMENTATIONEXPORTPROCESSSTATUS EXPORTSTATUS on RENEWALPROCESS.SEGMENTATIONEXPORTPROCESSSTATUSID = EXPORTSTATUS.ID 
    inner join dbo.MKTSEGMENTATIONEXPORTPROCESS EXPORTPROCESS on EXPORTSTATUS.PARAMETERSETID = EXPORTPROCESS.ID 
    inner join dbo.MKTSEGMENTATION SEGMENTATION on EXPORTPROCESS.SEGMENTATIONID = SEGMENTATION.ID
    where SEGMENTATION.ID = @ID;

    /***************************************************************************/
    /* Clean up the comm prefs related to activation - guid field so no cascade*/
    /***************************************************************************/
    declare @BPPARAMETERSETID uniqueidentifier;
    select @BPPARAMETERSETID = ID from dbo.MKTSEGMENTATIONACTIVATEPROCESS where SEGMENTATIONID = @ID;

    exec dbo.[USP_BUSINESSPROCESSCOMMPREF_DELETE] '22C3D75C-A956-4BFC-A5FD-4B866BAEF509', @BPPARAMETERSETID, @CHANGEAGENTID;

    /***************************************************************************/
    /* Delete the mailing, which will cascade delete a lot of other things too */
    /***************************************************************************/
    exec dbo.[USP_MKTSEGMENTATION_DELETEBYID_WITHCHANGEAGENTID] @ID, @CHANGEAGENTID;
  end try

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

  return 0;