USP_MKTRECORDSOURCE_CREATEMATCHBACKTABLE

.

Parameters

Parameter Parameter Type Mode Description
@RECORDSOURCEID uniqueidentifier IN
@GIFTQUERYVIEWCATALOGID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTRECORDSOURCE_CREATEMATCHBACKTABLE]
(
  @RECORDSOURCEID uniqueidentifier,
  @GIFTQUERYVIEWCATALOGID uniqueidentifier
)
with execute as owner
as
  set nocount on;

  declare @MATCHBACKTABLE nvarchar(128);
  declare @DONORIDDATATYPE nvarchar(50);
  declare @GIFTIDDATATYPE nvarchar(50);
  declare @SQL nvarchar(max);
  declare @USECOMPRESSION bit = (case when serverproperty('engineedition') = 3 then 1 else 0 end);

  begin try
    select
      @DONORIDDATATYPE = [PRIMARYKEYTYPENAME],
      @MATCHBACKTABLE = dbo.[UFN_MKTRECORDSOURCE_MAKEMATCHBACKTABLENAME]([ID])
    from dbo.[QUERYVIEWCATALOG]
    where [ID] = @RECORDSOURCEID;

    select
      @GIFTIDDATATYPE = [PRIMARYKEYTYPENAME]
    from dbo.[QUERYVIEWCATALOG]
    where [ID] = @GIFTQUERYVIEWCATALOGID;

    -- putting this in to allow alternate record sources to be turned on and off more easily while testing

    -- will most likely never come into play for clients

    if exists (select top 1 1 from sys.objects where name = @MATCHBACKTABLE and type = 'U')
      begin
        set @SQL = 'drop table dbo.[' + @MATCHBACKTABLE + '];';

        exec (@SQL);
      end

    set @SQL = 'create table dbo.[' + @MATCHBACKTABLE + '] (' + char(13) +
               '  [ID] uniqueidentifier rowguidcol not null,' + char(13) +
               '  [DONORID] ' + @DONORIDDATATYPE + ' not null,' + char(13) +
               '  [GIFTID] ' + @GIFTIDDATATYPE + ' not null,' + char(13) +
               '  [SEGMENTATIONID] uniqueidentifier not null' + char(13) +
               '  constraint [PK_' + @MATCHBACKTABLE + '] primary key clustered ([GIFTID] asc) with (IGNORE_DUP_KEY = OFF)' + char(13) +
               ')';

    if @USECOMPRESSION = 1
      set @SQL = @SQL + ' WITH (DATA_COMPRESSION = PAGE)';

    exec (@SQL);

    --Do not create a foreign key on ID to MKTSEGMENTLISTDATA, so we don't have to insert vendor managed IDs into two tables.

    --The foreign key would force us to insert mostly blank rows into the imported list data table, which we don't want to do.


    set @SQL = 'alter table dbo.[' + @MATCHBACKTABLE + '] with check add constraint [FK_' + @MATCHBACKTABLE + '_SEGMENTATIONID] foreign key([SEGMENTATIONID]) references dbo.[MKTSEGMENTATION] ([ID]) on delete cascade';
    exec (@SQL);

    set @SQL = 'create nonclustered index [IX_' + @MATCHBACKTABLE + '_ID] on dbo.[' + @MATCHBACKTABLE + '] ([ID] asc) with (PAD_INDEX = off, SORT_IN_TEMPDB = off, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off, FILLFACTOR = 90' + (case when @USECOMPRESSION = 1 then ', DATA_COMPRESSION = PAGE' else '' end) + ') on [IDXGROUP]';
    exec (@SQL);

    set @SQL = 'create nonclustered index [IX_' + @MATCHBACKTABLE + '_DONORID] on dbo.[' + @MATCHBACKTABLE + '] ([DONORID] asc) with (PAD_INDEX = off, SORT_IN_TEMPDB = off, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off, FILLFACTOR = 90' + (case when @USECOMPRESSION = 1 then ', DATA_COMPRESSION = PAGE' else '' end) + ') on [IDXGROUP]';
    exec (@SQL);

    set @SQL = 'create nonclustered index [IX_' + @MATCHBACKTABLE + '_SEGMENTATIONID] on dbo.[' + @MATCHBACKTABLE + '] ([SEGMENTATIONID] asc) include ([DONORID], [ID]) with (PAD_INDEX = off, SORT_IN_TEMPDB = off, DROP_EXISTING = off, IGNORE_DUP_KEY = off, ONLINE = off, FILLFACTOR = 90' + (case when @USECOMPRESSION = 1 then ', DATA_COMPRESSION = PAGE' else '' end) + ') on [IDXGROUP]';
    exec (@SQL);

    set @SQL = 'grant select, insert, update, delete on dbo.[' + @MATCHBACKTABLE + '] to [BBAPPFXSERVICEROLE]';
    exec (@SQL);
  end try

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

  return 0;