USP_MKTSEGMENTATIONFINDERNUMBER_DELETE

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

  declare @SEGMENTATIONID uniqueidentifier;
  declare @DATATABLE nvarchar(128);
  declare @MIN bigint;
  declare @MAX bigint;
  declare @SQL nvarchar(max);
  declare @ASSIGNED bigint;

  begin try
    select 
      @SEGMENTATIONID = [SEGMENTATIONID],
      @DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([SEGMENTATIONID]),
      @MIN = (case when [CHECKDIGIT] = 1 then ([MIN] * 10) else [MIN] end),
      @MAX = (case when [CHECKDIGIT] = 1 then (([MAX] * 10) + 9) else [MAX] end)
    from dbo.[MKTSEGMENTATIONFINDERNUMBER]
    where [ID] = @ID;

    if exists(select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @DATATABLE)
      begin
        set @SQL = 'select @ASSIGNED = count([FINDERNUMBER]) from dbo.[' + @DATATABLE + '] where [FINDERNUMBER] > 0 and [FINDERNUMBER] between @MIN and @MAX';
        exec sp_executesql @SQL, N'@ASSIGNED bigint output, @MIN bigint, @MAX bigint', @ASSIGNED = @ASSIGNED output, @MIN = @MIN, @MAX = @MAX;

        if @ASSIGNED > 0
          begin
            set @SQL = 'if exists(select * from dbo.sysindexes where name = ''UIX_' + @DATATABLE + '_FINDERNUMBER'')' + char(13) +
                       '  drop index [UIX_' + @DATATABLE + '_FINDERNUMBER] on dbo.[' + @DATATABLE + ']';
            exec (@SQL);

            set @SQL = 'alter table dbo.[' + @DATATABLE + '] alter column [FINDERNUMBER] bigint null';
            exec (@SQL);

            set @SQL = 'update dbo.[' + @DATATABLE + '] set [FINDERNUMBER] = null where [FINDERNUMBER] > 0 and [FINDERNUMBER] between @MIN and @MAX';
            exec sp_executesql @SQL, N'@MIN bigint, @MAX bigint', @MIN = @MIN, @MAX = @MAX;

            delete from dbo.[MKTSEGMENTATIONSEGMENTCACHEINFO]
            from dbo.[MKTSEGMENTATIONSEGMENTCACHEINFO] as [CACHE]
            inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [CACHE].[SEGMENTID]
            where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;
          end
      end

    exec dbo.[USP_MKTSEGMENTATIONFINDERNUMBER_DELETEBYID_WITHCHANGEAGENTID] @ID, @CHANGEAGENTID;
  end try

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

  return 0;