USP_MKTSEGMENTATIONEXCLUSION_ROLLBACK

Rolls back the effects of the update marketing effort counts process.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONEXCLUSIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATIONEXCLUSION_ROLLBACK]
(
  @SEGMENTATIONEXCLUSIONID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @IDSETREGISTERID uniqueidentifier;
  declare @IDSETTABLENAME nvarchar(128);
  declare @IDSETFUNCTIONNAME nvarchar(128);
  declare @IDSETFUNCTIONNAMEEXISTS nvarchar(128);
  declare @RECORDSOURCEID uniqueidentifier;
  declare @SARTABLE nvarchar(128);
  declare @SAREXCLTABLE nvarchar(128);
  declare @DATATABLE nvarchar(128);
  declare @EXCLUSIONTABLE nvarchar(128);
  declare @COLUMNNAME nvarchar(255);
  declare @SQL nvarchar(max);
  declare @VALUESSQL nvarchar(max);

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

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


    /**************************************/
    /* Delete any saved output selections */
    /**************************************/
    declare IDSETCURSOR cursor local fast_forward for
      select
        [IDSETREGISTER].[ID],
        [IDSETREGISTER].[DBOBJECTNAME]
      from dbo.[MKTSEGMENTATIONEXCLUSIONSELECTION]
      inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENTATIONEXCLUSIONSELECTION].[IDSETREGISTERID]
      where [MKTSEGMENTATIONEXCLUSIONSELECTION].[SEGMENTATIONEXCLUSIONID] = @SEGMENTATIONEXCLUSIONID;

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

    while (@@FETCH_STATUS = 0)
    begin
      set @IDSETFUNCTIONNAME = 'UFN_' + @IDSETTABLENAME;
      set @IDSETFUNCTIONNAMEEXISTS = @IDSETFUNCTIONNAME + '_IDEXISTS';
      exec dbo.[USP_IDSETREGISTER_DELETEBYID_WITHCHANGEAGENTID] @IDSETREGISTERID, @CHANGEAGENTID;
      exec dbo.[USP_IDSET_DELETE] @IDSETFUNCTIONNAME, @IDSETFUNCTIONNAMEEXISTS;
      exec dbo.[USP_IDSET_DELETESTATICTABLE] @IDSETTABLENAME;

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

    close IDSETCURSOR;
    deallocate IDSETCURSOR;


    /*************************/
    /* Reinsert the SAR data */
    /*************************/
    declare RSCURSOR cursor local fast_forward for
      select [QUERYVIEWCATALOGID]
      from dbo.[UFN_MKTSEGMENTATION_GETDISTINCTRECORDSOURCES](@SEGMENTATIONID);

    open RSCURSOR;
    fetch next from RSCURSOR into @RECORDSOURCEID;

    while (@@FETCH_STATUS = 0)
    begin
      set @SARTABLE = dbo.[UFN_MKTSOURCEANALYSISRULE_MAKETABLENAME](@RECORDSOURCEID);
      set @SAREXCLTABLE = dbo.[UFN_MKTSOURCEANALYSISRULEEXCLUSION_MAKETABLENAME](@RECORDSOURCEID);

      set @SQL = 'insert into dbo.[' + @SARTABLE + '] (' + char(13);
      set @VALUESSQL = 'select' + char(13);

      if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @SAREXCLTABLE)
        begin
          --Build the SQL to copy all the columns...

          declare COLUMNCURSOR cursor local fast_forward for
            select [COLUMN_NAME] 
            from INFORMATION_SCHEMA.COLUMNS
            where [TABLE_SCHEMA] = 'dbo'
            and [TABLE_NAME] = @SARTABLE
            and [COLUMN_NAME] <> 'ID';  --ID is an identity field so we want to skip it


          open COLUMNCURSOR;
          fetch next from COLUMNCURSOR into @COLUMNNAME;

          if @@FETCH_STATUS = 0
            begin
              set @SQL += '  [' + @COLUMNNAME + ']' + char(13);
              set @VALUESSQL += '  [EXCL].[' + @COLUMNNAME + ']' + char(13);
              fetch next from COLUMNCURSOR into @COLUMNNAME;
            end

          while (@@FETCH_STATUS = 0)
          begin
            set @SQL += '  ,[' + @COLUMNNAME + ']' + char(13);
            set @VALUESSQL += '  ,[EXCL].[' + @COLUMNNAME + ']' + char(13);
            fetch next from COLUMNCURSOR into @COLUMNNAME;
          end

          close COLUMNCURSOR;
          deallocate COLUMNCURSOR;

          --Reinsert the SAR data...

          set @SQL += ')' + char(13) +
                      @VALUESSQL +
                      'from dbo.[' + @SAREXCLTABLE + '] as [EXCL]' + char(13) +
                      'left join dbo.[' + @SARTABLE + '] as [SAR] on [SAR].[FINDERNUMBER] = [EXCL].[FINDERNUMBER]' + char(13) +
                      'where [SEGMENTATIONEXCLUSIONID] = @SEGMENTATIONEXCLUSIONID' + char(13) +
                      'and [SAR].[FINDERNUMBER] is null';
          exec sp_executesql @SQL , N'@SEGMENTATIONEXCLUSIONID uniqueidentifier', @SEGMENTATIONEXCLUSIONID = @SEGMENTATIONEXCLUSIONID;

          --Delete from SAR exclusion table...

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

      fetch next from RSCURSOR into @RECORDSOURCEID;      
    end

    close RSCURSOR;
    deallocate RSCURSOR;


    /*****************************/
    /* Reinsert the mailing data */
    /*****************************/
    set @DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID);
    set @EXCLUSIONTABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATEEXCLUSION_MAKETABLENAME](@SEGMENTATIONID);

    set @SQL = 'insert into dbo.[' + @DATATABLE + '] (' + char(13);
    set @VALUESSQL = 'select' + char(13);

    if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @EXCLUSIONTABLE)
      begin
        --Build the SQL to copy all the columns...

        declare COLUMNCURSOR cursor local fast_forward for
          select [COLUMN_NAME] 
          from INFORMATION_SCHEMA.COLUMNS 
          where [TABLE_SCHEMA] = 'dbo'
          and [TABLE_NAME] = @DATATABLE;

        open COLUMNCURSOR;
        fetch next from COLUMNCURSOR into @COLUMNNAME;

        if @@FETCH_STATUS = 0
          begin
            set @SQL += '  [' + @COLUMNNAME + ']' + char(13);
            set @VALUESSQL += '  [EXCL].[' + @COLUMNNAME + ']' + char(13);
            fetch next from COLUMNCURSOR into @COLUMNNAME;
          end

        while(@@FETCH_STATUS = 0)
        begin
          set @SQL += '  ,[' + @COLUMNNAME + ']' + char(13);
          set @VALUESSQL += '  ,[EXCL].[' + @COLUMNNAME + ']' + char(13);
          fetch next from COLUMNCURSOR into @COLUMNNAME;
        end

        close COLUMNCURSOR;
        deallocate COLUMNCURSOR;

        /****************************************/
        /* Restore the CONSTITUENTSEGMENT table */
        /****************************************/
        exec dbo.[USP_MKTSEGMENTATIONACTIVATE_CACHECONSTITUENTSEGMENTS] @SEGMENTATIONID, @SEGMENTATIONEXCLUSIONID;

        --Reinsert the mailing data...

        set @SQL += ')' + char(13) +
                    @VALUESSQL +
                    'from dbo.[' + @EXCLUSIONTABLE + '] as [EXCL]' + char(13) +
                    'left join dbo.[' + @DATATABLE + '] as [DATA] on [DATA].[FINDERNUMBER] = [EXCL].[FINDERNUMBER]' + char(13) +
                    'where [SEGMENTATIONEXCLUSIONID] = @SEGMENTATIONEXCLUSIONID' + char(13) +
                    'and [DATA].[FINDERNUMBER] is null';
        exec sp_executesql @SQL , N'@SEGMENTATIONEXCLUSIONID uniqueidentifier', @SEGMENTATIONEXCLUSIONID = @SEGMENTATIONEXCLUSIONID;

        --Delete from mailing data exclusion table...

        set @SQL = 'delete from dbo.[' + @EXCLUSIONTABLE + ']' + char(13) +
                   'where [SEGMENTATIONEXCLUSIONID] = @SEGMENTATIONEXCLUSIONID';

        exec sp_executesql @SQL, N'@SEGMENTATIONEXCLUSIONID uniqueidentifier', @SEGMENTATIONEXCLUSIONID = @SEGMENTATIONEXCLUSIONID;
      end

    /********************************/
  /* Delete mail exclusion record */
    /********************************/
    exec dbo.[USP_MKTSEGMENTATIONEXCLUSION_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTATIONEXCLUSIONID, @CHANGEAGENTID;

  end try

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

  return 0;