USP_MKTSEGMENTATION_POPULATEEXCLUDEDIDSTEMPTABLE

Populates a temp table with the excluded donor IDs for a given marketing effort.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN
@EXCLUDEDIDSTEMPTABLENAME nvarchar(128) IN
@CALLERHANDLEDINSERT bit IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATION_POPULATEEXCLUDEDIDSTEMPTABLE]
(
  @SEGMENTATIONID uniqueidentifier,
  @EXCLUDEDIDSTEMPTABLENAME nvarchar(128),
  @CALLERHANDLEDINSERT bit = 0
)
as
  set nocount on;

  declare @SEGMENTID uniqueidentifier;
  declare @SEGMENTNAME nvarchar(100);
  declare @SEGMENTTYPECODE tinyint;
  declare @SEGMENTVIEWNAME nvarchar(128);
  declare @SEGMENTATIONSEGMENTID uniqueidentifier;
  declare @RECORDSOURCEID uniqueidentifier;
  declare @RECORDSOURCETYPE tinyint;
  declare @ISBBEC bit;
  declare @QUERYVIEWCATALOGID uniqueidentifier;
  declare @PKDATATYPE nvarchar(128);
  declare @DONORTORECIPIENTCONVERSIONTABLENAME nvarchar(128);
  declare @DONORTORECIPIENTCONVERSIONDONORIDFIELDNAME nvarchar(255);
  declare @DONORTORECIPIENTCONVERSIONRECIPIENTIDFIELDNAME nvarchar(255);
  declare @NEEDDISTINCT bit = 0;

  declare @EFFORTTYPECODE tinyint;
  declare @DATATABLE nvarchar(128);
  declare @USECONSTITUENTFILEIMPORTTABLE bit = 0;
  declare @CONSTITUENTFILEIMPORTTABLE nvarchar(128);

  declare @SQL nvarchar(max);

  declare @FULLNAMEFIELDNAME nvarchar(max);  --this needs to be more than 255

  declare @FIRSTNAMEFIELDNAME nvarchar(255);
  declare @MIDDLENAMEFIELDNAME nvarchar(255);
  declare @LASTNAMEFIELDNAME nvarchar(255);
  declare @ORGNAMEFIELDNAME nvarchar(255);
  declare @PARENTTABLENAME nvarchar(128);
  declare @PARENTID nvarchar(128);

  begin try
    select
      @EFFORTTYPECODE = [MAILINGTYPECODE],
      @DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([ID]),
      @CONSTITUENTFILEIMPORTTABLE = dbo.[UFN_MKTCONSTITUENTFILEIMPORT_BUILDTABLENAME]([ID])
    from dbo.[MKTSEGMENTATION]
    where [ID] = @SEGMENTATIONID;

    if @EFFORTTYPECODE = 0 and exists (select top 1 1 from [INFORMATION_SCHEMA].[TABLES] where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @CONSTITUENTFILEIMPORTTABLE)
      set @USECONSTITUENTFILEIMPORTTABLE = 1;

    if @CALLERHANDLEDINSERT = 0
      begin
        /* Insert excluded IDs into a temp table for each segment in the effort. */
        declare SEGMENTCURSOR cursor local fast_forward for
          select
            [MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTATIONSEGMENTID],
            [MKTSEGMENT].[ID] as [SEGMENTID],
            [MKTSEGMENT].[NAME] as [SEGMENTNAME],
            [MKTSEGMENT].[SEGMENTTYPECODE],
            dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([MKTSEGMENT].[IDSETREGISTERID]) as [SEGMENTVIEWNAME],
            [MKTSEGMENT].[QUERYVIEWCATALOGID] as [RECORDSOURCEID],
            dbo.[UFN_MKTSEGMENT_GETMARKETINGRECORDTYPE]([MKTSEGMENT].[ID]) as [RECORDSOURCETYPE],
            convert(bit, case when dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([MKTSEGMENT].[QUERYVIEWCATALOGID]) = 1 then 1 else 0 end)
          from dbo.[MKTSEGMENTATIONSEGMENT]
          inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
          where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
          and [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 0
          order by [MKTSEGMENTATIONSEGMENT].[SEQUENCE];

        open SEGMENTCURSOR;
        fetch next from SEGMENTCURSOR into @SEGMENTATIONSEGMENTID, @SEGMENTID, @SEGMENTNAME, @SEGMENTTYPECODE, @SEGMENTVIEWNAME, @RECORDSOURCEID, @RECORDSOURCETYPE, @ISBBEC;

        while (@@FETCH_STATUS = 0)
          begin
            /* Get the parent table name and primary ID field name. */
            if @RECORDSOURCETYPE = 1  --Record Source

              select
                @QUERYVIEWCATALOGID = [QUERYVIEWCATALOG].[ID],
                @PKDATATYPE = [QUERYVIEWCATALOG].[PRIMARYKEYTYPENAME]
              from dbo.[MKTSEGMENT]
              inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
              where [MKTSEGMENT].[ID] = @SEGMENTID;
            else
              begin
                if @RECORDSOURCETYPE = 2  --List or duplicate list

                  select
            @QUERYVIEWCATALOGID = [QUERYVIEWCATALOG].[ID],
                    @PKDATATYPE = [QUERYVIEWCATALOG].[PRIMARYKEYTYPENAME]
                  from dbo.[MKTSEGMENT]
                  inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
                  left join dbo.[MKTSEGMENT] as [PARENTSEGMENT] on [PARENTSEGMENT].[ID] = [MKTSEGMENTLIST].[PARENTSEGMENTID]
                  left join dbo.[MKTSEGMENTLIST] as [PARENTSEGMENTLIST] on [PARENTSEGMENTLIST].[ID] = [PARENTSEGMENT].[CURRENTSEGMENTLISTID]
                  inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTSEGMENTLIST].[QUERYVIEWCATALOGID] or [QUERYVIEWCATALOG].[ID] = [PARENTSEGMENTLIST].[QUERYVIEWCATALOGID]
                  where [MKTSEGMENT].[ID] = @SEGMENTID;
                else
                  begin
                    if @RECORDSOURCETYPE = 3  --Consolidated

                      select
                        @QUERYVIEWCATALOGID = [CQV].[ID],
                        @PKDATATYPE = [CQV].[PRIMARYKEYTYPENAME]
                      from dbo.[MKTSEGMENT]
                      inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
                      inner join dbo.[MKTCONSOLIDATEDQUERYVIEWSPEC] on [MKTCONSOLIDATEDQUERYVIEWSPEC].[ID] = [QUERYVIEWCATALOG].[ID]
                      inner join dbo.[QUERYVIEWCATALOG] as [CQV] on [CQV].[ID] = [MKTCONSOLIDATEDQUERYVIEWSPEC].[CONSOLIDATEDQUERYVIEWCATALOGID]
                      where [MKTSEGMENT].[ID] = @SEGMENTID;
                    else
                      raiserror('Segment contains an invalid selection type.', 13, 1);
                  end
              end

            if @EFFORTTYPECODE = 1 -- acknowledgement

              begin
                select 
                  @NEEDDISTINCT = 1,  --needed because the same DONORID could be in the set of records more than once

                  -- if non-acknowledgement selections are used in the mailing's universe or exclusions, the following information

                  -- is used to turn them into sponsorships

                  @DONORTORECIPIENTCONVERSIONTABLENAME = case when @ISBBEC = 1 then 'FINANCIALTRANSACTION' else [QUERYVIEWCATALOG].[OBJECTNAME] end,
                  @DONORTORECIPIENTCONVERSIONDONORIDFIELDNAME = case when @ISBBEC = 1 then 'CONSTITUENTID' else [MKTGIFTRECORDSOURCE].[DONORIDFIELD] end,
                  @DONORTORECIPIENTCONVERSIONRECIPIENTIDFIELDNAME = case when @ISBBEC = 1 then 'ID' else [QUERYVIEWCATALOG].[PRIMARYKEYFIELD] end
                from dbo.[MKTGIFTRECORDSOURCE]
                inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTGIFTRECORDSOURCE].[QUERYVIEWCATALOGID]
                where [MKTGIFTRECORDSOURCE].[ID] = @RECORDSOURCEID;
              end
            else if @EFFORTTYPECODE = 2 -- membership

              begin
                select
                  @NEEDDISTINCT = 1,  --needed because the same DONORID could be in the set of records more than once

                  -- if non-membership selections are used in the mailing's universe or exclusions, the following information

                  -- is used to turn them into memberships

                  @DONORTORECIPIENTCONVERSIONTABLENAME = case when @ISBBEC = 1 then 'MEMBER' else [QUERYVIEWCATALOG].[OBJECTNAME] end,
                  @DONORTORECIPIENTCONVERSIONDONORIDFIELDNAME = case when @ISBBEC = 1 then 'CONSTITUENTID' else [MKTMEMBERSHIPRECORDSOURCE].[MEMBERIDFIELD] end,
                  @DONORTORECIPIENTCONVERSIONRECIPIENTIDFIELDNAME = case when @ISBBEC = 1 then 'MEMBERSHIPID' else [MKTMEMBERSHIPRECORDSOURCE].[MEMBERSHIPSYSTEMIDFIELD] end
                from dbo.[MKTMEMBERSHIPRECORDSOURCE]
                inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTMEMBERSHIPRECORDSOURCE].[QUERYVIEWCATALOGID]
                where [MKTMEMBERSHIPRECORDSOURCE].[ID] = @RECORDSOURCEID;
       end
            else if @EFFORTTYPECODE = 3 -- sponsorship

              begin
                select
                  @NEEDDISTINCT = 1,  --needed because the same DONORID could be in the set of records more than once

                  -- if non-sponsorship selections are used in the mailing's universe or exclusions, the following information

                  -- is used to turn them into sponsorships

                  @DONORTORECIPIENTCONVERSIONTABLENAME = case when @ISBBEC = 1 then 'SPONSORSHIP' else [QUERYVIEWCATALOG].[OBJECTNAME] end,
                  @DONORTORECIPIENTCONVERSIONDONORIDFIELDNAME = case when @ISBBEC = 1 then 'CONSTITUENTID' else [MKTSPONSORSHIPRECORDSOURCE].[SPONSORIDFIELD] end,
                  @DONORTORECIPIENTCONVERSIONRECIPIENTIDFIELDNAME = case when @ISBBEC = 1 then 'ID' else [MKTSPONSORSHIPRECORDSOURCE].[SPONSORSHIPSYSTEMIDFIELD] end
                from dbo.[MKTSPONSORSHIPRECORDSOURCE]
                inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTSPONSORSHIPRECORDSOURCE].[QUERYVIEWCATALOGID]
                where [MKTSPONSORSHIPRECORDSOURCE].[ID] = @RECORDSOURCEID;
              end

            /* Get the excluded DonorIDs and their segment names... */
            --Put the segment view IDs into a temp table first to improve performance of the "except" statement on very large data...

            set @SQL = 'create table #TEMP ([ID] ' + @PKDATATYPE + ' not null primary key);' + char(13) +
                       char(13) +
                       'insert into #TEMP ([ID])' + char(13);

            if @SEGMENTTYPECODE = 1 and @USECONSTITUENTFILEIMPORTTABLE = 1
              set @SQL = @SQL + '  select distinct [RECORDID] from dbo.[' + @CONSTITUENTFILEIMPORTTABLE + '] where [SEGMENTATIONSEGMENTID] = @SEGMENTATIONSEGMENTID;' + char(13);
            else
              set @SQL = @SQL + '  select [ID] from dbo.' + @SEGMENTVIEWNAME + ';' + char(13);

            set @SQL = @SQL + char(13) +
                       'insert into dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] ([DONORID], [SEGMENTID], [SEGMENTNAME], [QUERYVIEWCATALOGID])' + char(13) + 
                       '  select ' + case when @NEEDDISTINCT = 1 then 'distinct' else '' end + char(13) +
                       '    ' + (case when @EFFORTTYPECODE = 0 then '[SEGMENTVIEW].[ID]' else '[' + @DONORTORECIPIENTCONVERSIONTABLENAME + '].[' + @DONORTORECIPIENTCONVERSIONDONORIDFIELDNAME + ']' end) + ',' + char(13) +
                       '    @SEGMENTID,' + char(13) +
                       '    @SEGMENTNAME,' + char(13) +
                       '    @QUERYVIEWCATALOGID' + char(13) +
                       '  from #TEMP as [SEGMENTVIEW]' + char(13);

            if @EFFORTTYPECODE <> 0
              set @SQL += '  inner join dbo.[' + @DONORTORECIPIENTCONVERSIONTABLENAME + '] on [' + @DONORTORECIPIENTCONVERSIONTABLENAME + '].[' + @DONORTORECIPIENTCONVERSIONRECIPIENTIDFIELDNAME + '] = [SEGMENTVIEW].[ID]' + char(13);

            if @EFFORTTYPECODE = 2  --membership

              set @SQL += '    and [' + @DONORTORECIPIENTCONVERSIONTABLENAME + '].[ISPRIMARY] = 1 and [' + @DONORTORECIPIENTCONVERSIONTABLENAME + '].[ISDROPPED] = 0' + char(13) +
                          '  inner join dbo.[MEMBERSHIP] on [MEMBERSHIP].[ID] = [' + @DONORTORECIPIENTCONVERSIONTABLENAME + '].[' + @DONORTORECIPIENTCONVERSIONRECIPIENTIDFIELDNAME + '] and [MEMBERSHIP].[STATUSCODE] <> 1' + char(13);

            set @SQL += '  except' + char(13) + 
                        '  select ' + case when @NEEDDISTINCT = 1 then 'distinct' else '' end + char(13) +
                        '    [DATATABLE].[DONORID],'+ char(13) +
                        '    @SEGMENTID,' + char(13) +
                        '    @SEGMENTNAME,' + char(13) +
                        '    @QUERYVIEWCATALOGID' + char(13) +
                        '  from dbo.[' + @DATATABLE + '] as [DATATABLE]' + char(13) +
    '  where [DATATABLE].[SEGMENTID] = @SEGMENTATIONSEGMENTID;' + char(13) +
                        char(13) +
                        'drop table #TEMP;';

            --print @SQL + char(13);

            exec sp_executesql @SQL, N'@SEGMENTID uniqueidentifier, @SEGMENTNAME nvarchar(100), @QUERYVIEWCATALOGID uniqueidentifier, @SEGMENTATIONSEGMENTID uniqueidentifier', @SEGMENTID = @SEGMENTID, @SEGMENTNAME = @SEGMENTNAME, @QUERYVIEWCATALOGID = @QUERYVIEWCATALOGID, @SEGMENTATIONSEGMENTID = @SEGMENTATIONSEGMENTID;

            fetch next from SEGMENTCURSOR into @SEGMENTATIONSEGMENTID, @SEGMENTID, @SEGMENTNAME, @SEGMENTTYPECODE, @SEGMENTVIEWNAME, @RECORDSOURCEID, @RECORDSOURCETYPE, @ISBBEC;
          end

        close SEGMENTCURSOR;
        deallocate SEGMENTCURSOR;
      end

    --Add an index to DONORID...

    set @SQL = 'create nonclustered index [IX_' + replace(@EXCLUDEDIDSTEMPTABLENAME, '#', '') + '_DONORID] on dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] ([DONORID])';
    exec (@SQL);

    --Add an index to SEGMENTID...

    set @SQL = 'create nonclustered index [IX_' + replace(@EXCLUDEDIDSTEMPTABLENAME, '#', '') + '_SEGMENTID] on dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] ([SEGMENTID])';
    exec (@SQL);

    --Add an index to QUERYVIEWCATALOGID...

    set @SQL = 'create nonclustered index [IX_' + replace(@EXCLUDEDIDSTEMPTABLENAME, '#', '') + '_QUERYVIEWCATALOGID] on dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] ([QUERYVIEWCATALOGID]) include ([DONORID])';
    exec (@SQL);

    --Update the donor name for each parent queryview....

    declare @PARENTCURSOR cursor;
    set @SQL = 'declare @QUERYVIEWS table (' + char(13) +
               '  [SEGMENTID] uniqueidentifier not null,' + char(13) +
               '  [QUERYVIEWCATALOGID] uniqueidentifier not null' + char(13) +
               ');' + char(13) +
               char(13) +
               'insert into @QUERYVIEWS ([SEGMENTID], [QUERYVIEWCATALOGID])' + char(13) +
               '  select distinct' + char(13) +
               '    [SEGMENTID],' + char(13) +
               '    [QUERYVIEWCATALOGID]' + char(13) +
               '  from dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '];' + char(13) +
               char(13) +
               'set @PARENTCURSOR = cursor local fast_forward for' + char(13) +
               '  select distinct' + char(13) +
               '    [MKTSEGMENT].[QUERYVIEWCATALOGID],' + char(13) +
               '    [MKTRECORDSOURCEFIELDMAPPINGS].[FULLNAMEFIELD],' + char(13) +
               '    [MKTRECORDSOURCEFIELDMAPPINGS].[FIRSTNAMEFIELD],' + char(13) +
               '    [MKTRECORDSOURCEFIELDMAPPINGS].[MIDDLENAMEFIELD],' + char(13) +
               '    [MKTRECORDSOURCEFIELDMAPPINGS].[LASTNAMEFIELD],' + char(13) +
               '    [MKTRECORDSOURCEFIELDMAPPINGS].[ORGNAMEFIELD],' + char(13) +
               '    [QUERYVIEWCATALOG].[ID],' + char(13) +
               '    [QUERYVIEWCATALOG].[OBJECTNAME],' + char(13) +
               '    [QUERYVIEWCATALOG].[PRIMARYKEYFIELD]' + char(13) +
               '  from @QUERYVIEWS as [QV]' + char(13) +
               '  inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [QV].[SEGMENTID]' + char(13) +
               '  inner join dbo.[MKTRECORDSOURCEFIELDMAPPINGS] on [MKTRECORDSOURCEFIELDMAPPINGS].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]' + char(13) +
               '  inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [QV].[QUERYVIEWCATALOGID];' + char(13) +
               'open @PARENTCURSOR;';
    exec sp_executesql @SQL, N'@PARENTCURSOR cursor output', @PARENTCURSOR = @PARENTCURSOR output;
    fetch next from @PARENTCURSOR into @RECORDSOURCEID, @FULLNAMEFIELDNAME, @FIRSTNAMEFIELDNAME, @MIDDLENAMEFIELDNAME, @LASTNAMEFIELDNAME, @ORGNAMEFIELDNAME, @QUERYVIEWCATALOGID, @PARENTTABLENAME, @PARENTID;

    while (@@FETCH_STATUS = 0)
    begin
      --See if the fields exist in the table/view and clear the name if necessary...

      if @FULLNAMEFIELDNAME <> '' and exists(select * from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @PARENTTABLENAME and [COLUMN_NAME] = @FULLNAMEFIELDNAME)
        set @FULLNAMEFIELDNAME = '[PARENT].[' + @FULLNAMEFIELDNAME + ']';
      else
        set @FULLNAMEFIELDNAME = '';

      --Lists don't necessarily have the fullname field mapped, so we may have to build the name...

      if @RECORDSOURCEID <> @QUERYVIEWCATALOGID or @FULLNAMEFIELDNAME = ''
        begin
          if @FIRSTNAMEFIELDNAME <> '' and exists(select * from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @PARENTTABLENAME and [COLUMN_NAME] = @FIRSTNAMEFIELDNAME)
            set @FIRSTNAMEFIELDNAME = '[PARENT].[' + @FIRSTNAMEFIELDNAME + ']';
          else
            set @FIRSTNAMEFIELDNAME = '';

          if @MIDDLENAMEFIELDNAME <> '' and exists(select * from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @PARENTTABLENAME and [COLUMN_NAME] = @MIDDLENAMEFIELDNAME)
            set @MIDDLENAMEFIELDNAME = '[PARENT].[' + @MIDDLENAMEFIELDNAME + ']';
          else
            set @MIDDLENAMEFIELDNAME = '';

          if @LASTNAMEFIELDNAME <> '' and exists(select * from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @PARENTTABLENAME and [COLUMN_NAME] = @LASTNAMEFIELDNAME)
            set @LASTNAMEFIELDNAME = '[PARENT].[' + @LASTNAMEFIELDNAME + ']';
          else
            set @LASTNAMEFIELDNAME = '';

          if @ORGNAMEFIELDNAME <> '' and exists(select * from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @PARENTTABLENAME and [COLUMN_NAME] = @ORGNAMEFIELDNAME)
            set @ORGNAMEFIELDNAME = '[PARENT].[' + @ORGNAMEFIELDNAME + ']';
          else
            set @ORGNAMEFIELDNAME = '';

          set @FULLNAMEFIELDNAME = 'coalesce(' +
              (case when @ORGNAMEFIELDNAME = '' then '' else '(case isnull(' + @ORGNAMEFIELDNAME + ', '''') when '''' then null else ' + @ORGNAMEFIELDNAME + ' end), ' end) +
              (case when @FULLNAMEFIELDNAME = '' then '' else '(case isnull(' + @FULLNAMEFIELDNAME + ', '''') when '''' then null else ' + @FULLNAMEFIELDNAME + ' end), ' end) +
              (case when @FIRSTNAMEFIELDNAME = '' then '' else '(case isnull(' + @FIRSTNAMEFIELDNAME + ', '''') when '''' then '''' else ' + @FIRSTNAMEFIELDNAME + ' + '' '' end) + ' end) +
              (case when @MIDDLENAMEFIELDNAME = '' then '' else '(case isnull(' + @MIDDLENAMEFIELDNAME + ', '''') when '''' then '''' else left(' + @MIDDLENAMEFIELDNAME + ', 1) + ''. '' end) + ' end) +
              (case when @LASTNAMEFIELDNAME = '' then '' else 'isnull(' + @LASTNAMEFIELDNAME + ', ''''), ' end) +
              '''''' +
            ')';
        end

      --Update the donor name for each parent queryview....

      set @SQL = 'update dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] set' + char(13) +
                 '  [NAME] = ' + @FULLNAMEFIELDNAME + char(13) +
                 'from dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] as [EXCLUDEDIDS]' + char(13) +
                 'inner join dbo.[' + @PARENTTABLENAME + '] as [PARENT] on [PARENT].[' + @PARENTID + '] = [EXCLUDEDIDS].[DONORID]' + char(13) +
                 'where [EXCLUDEDIDS].[QUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID';

      --print @SQL + char(13);

      exec sp_executesql @SQL, N'@QUERYVIEWCATALOGID uniqueidentifier', @QUERYVIEWCATALOGID = @QUERYVIEWCATALOGID;

      fetch next from @PARENTCURSOR into @RECORDSOURCEID, @FULLNAMEFIELDNAME, @FIRSTNAMEFIELDNAME, @MIDDLENAMEFIELDNAME, @LASTNAMEFIELDNAME, @ORGNAMEFIELDNAME, @QUERYVIEWCATALOGID, @PARENTTABLENAME, @PARENTID;
    end

    close @PARENTCURSOR;
    deallocate @PARENTCURSOR;


    --Recreate the index on DONORID to include NAME and SEGMENTNAME.  It is much faster to recreate this index after updating the NAME column above...

    set @SQL = 'create nonclustered index [IX_' + replace(@EXCLUDEDIDSTEMPTABLENAME, '#', '') + '_DONORID] on dbo.[' + @EXCLUDEDIDSTEMPTABLENAME + '] ([DONORID]) include ([NAME], [SEGMENTNAME]) with (DROP_EXISTING = ON)';
    exec (@SQL);
  end try

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

  return 0;