USP_MKTSEGMENTLIST_ROLLBACKIMPORT

Rollback all the changes made while importing a list segment, if the import fails.

Parameters

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

Definition

Copy


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

  declare @SEGMENTID uniqueidentifier;
  declare @QUERYVIEWCATALOGID uniqueidentifier;
  declare @STANDARDIDSETID uniqueidentifier;
  declare @DUPLICATEIDSETID uniqueidentifier;
  declare @IDSETRECORDTYPEID uniqueidentifier;

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

    select
      @SEGMENTID = [SEGMENTID],
      @QUERYVIEWCATALOGID = [QUERYVIEWCATALOGID],
      @STANDARDIDSETID = [STANDARDIDSETID],
      @DUPLICATEIDSETID = [DUPLICATEIDSETID],
      @IDSETRECORDTYPEID = [IDSETRECORDTYPEID]
    from [MKTSEGMENTLIST]
    where [ID] = @SEGMENTLISTID;

    --Rollback any existing selections to use the old query view...

    exec dbo.[USP_MKTSEGMENTLIST_UPDATEEXISTINGSELECTIONS] @SEGMENTID, 1, @CHANGEAGENTID;

    --Set all query view and IDSet related values to null so we don't invalidate any foreign key relationships when the queries are deleted.

    --Also reset the min/max record IDs.

    update dbo.[MKTSEGMENTLIST] set
      [QUERYVIEWCATALOGID] = null,
      [STANDARDIDSETID] = null,
      [DUPLICATEIDSETID] = null,
      [IDSETRECORDTYPEID] = null,
      [MINIMUMDATAID] = null,
      [MAXIMUMDATAID] = null,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = getdate()
    where [ID] = @SEGMENTLISTID;


    /***********************************************/
    /* Drop the query view for the list segment... */
    /***********************************************/
    if @QUERYVIEWCATALOGID is not null
      begin
        declare @VIEWNAMEFORQUERY nvarchar(128);

        set @VIEWNAMEFORQUERY = dbo.[UFN_MKTSEGMENTLIST_MAKEVIEWNAME_FORQUERY](@SEGMENTLISTID);

        if exists(select 1 from INFORMATION_SCHEMA.VIEWS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @VIEWNAMEFORQUERY)
          exec ('drop view dbo.[' + @VIEWNAMEFORQUERY + ']');

        exec dbo.[USP_QUERYVIEWCATALOG_DELETEBYID_WITHCHANGEAGENTID] @QUERYVIEWCATALOGID, @CHANGEAGENTID;


        /*******************************************************************************/
        /* Cleanup the LoadSpecLog table so it doesn't get cluttered with artifacts... */
        /*******************************************************************************/
        declare @LOADSPECLOGID uniqueidentifier;
        declare LOADSPECLOGCURSOR cursor local fast_forward for
          select [ID]
          from dbo.[LOADSPECLOG]
          where [SPECID] = @QUERYVIEWCATALOGID;

        open LOADSPECLOGCURSOR;
        fetch next from LOADSPECLOGCURSOR into @LOADSPECLOGID;

        while (@@FETCH_STATUS = 0)
        begin
          exec dbo.[USP_LOADSPECLOG_DELETEBYID_WITHCHANGEAGENTID] @LOADSPECLOGID, @CHANGEAGENTID;
          fetch next from LOADSPECLOGCURSOR into @LOADSPECLOGID;
        end

        close LOADSPECLOGCURSOR;
        deallocate LOADSPECLOGCURSOR;
      end


    /****************************************************/
    /* Delete the list segment deduplication process... */
    /****************************************************/
    declare @SEGMENTLISTDEDUPEPROCESSID uniqueidentifier;

    select @SEGMENTLISTDEDUPEPROCESSID = [ID]
    from dbo.[MKTSEGMENTLISTDEDUPEPROCESS]
    where [SEGMENTLISTID] = @SEGMENTLISTID;

    if @SEGMENTLISTDEDUPEPROCESSID is not null
      exec dbo.[USP_MKTSEGMENTLISTDEDUPEPROCESS_DELETEBYID_WITHCHANGEAGENTID] @SEGMENTLISTDEDUPEPROCESSID, @CHANGEAGENTID;


    /********************************************************/
    /* Delete the ID sets and the associated record type... */
    /********************************************************/
    exec dbo.[USP_MKTSEGMENTLIST_DELETEIDSETS] @SEGMENTLISTID, @STANDARDIDSETID, @DUPLICATEIDSETID, @IDSETRECORDTYPEID, @CHANGEAGENTID;


    /**********************************/
    /* Delete the imported records... */
    /**********************************/
    delete from dbo.[MKTSEGMENTLISTDATA]
    where [SEGMENTLISTID] = @SEGMENTLISTID;
  end try

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

  return 0;