USP_MKTREVENUELETTER_CREATEORUPDATEVIEWS

Creates or updates views to look across all the revenue letter tables.

Definition

Copy


CREATE procedure dbo.[USP_MKTREVENUELETTER_CREATEORUPDATEVIEWS]
with execute as owner
as
  set nocount on;

  declare @SQL nvarchar(max);
  declare @SQLAUDIT nvarchar(max);
  declare @RECORDSOURCEID uniqueidentifier;
  declare @REVENUELETTERTABLENAME nvarchar(128);
  declare @NEEDUNION bit;
  declare @ALIAS nvarchar(11);

  set @NEEDUNION = 0;
  set @ALIAS = '###ALIAS###';


  if exists(select 1 from INFORMATION_SCHEMA.VIEWS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'V_MKTREVENUELETTER')
    set @SQL = 'alter ';
  else
    set @SQL = 'create ';
  set @SQL = @SQL + 'view dbo.[V_MKTREVENUELETTER]' + char(13) + 'as' + char(13);

  if exists(select 1 from INFORMATION_SCHEMA.VIEWS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'V_MKTREVENUELETTERAUDIT')
    set @SQLAUDIT = 'alter ';
  else
    set @SQLAUDIT = 'create ';
  set @SQLAUDIT = @SQLAUDIT + 'view dbo.[V_MKTREVENUELETTERAUDIT]' + char(13) + 'as' + char(13);


  --Loop through each record source and union the tables together for the views...

  declare RECORDSOURCECURSOR cursor local fast_forward for
    select [ID], dbo.[UFN_MKTREVENUELETTER_MAKETABLENAME]([ID])
    from dbo.[MKTGIFTRECORDSOURCE]
    where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([ID]) = 1;

  open RECORDSOURCECURSOR;
  fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @REVENUELETTERTABLENAME;

  while (@@FETCH_STATUS = 0)
  begin
    if @NEEDUNION = 1
      begin
        set @SQL = @SQL + char(13) + '  union all' + char(13);
        set @SQLAUDIT = @SQLAUDIT + char(13) + '  union all' + char(13);
      end

    -- Package id only exists on the REVENUELETTERMARKETING table, not the RE tables

    declare @PACKAGESELECT nvarchar(50) = case when dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1 then @ALIAS + '.[MKTPACKAGEID]' else 'cast(null as uniqueidentifier) as [MKTPACKAGEID]' end;

    set @SQL = @SQL + '  select cast(''' + cast(@RECORDSOURCEID as varchar(36)) + ''' as uniqueidentifier) as [RECORDSOURCEID], [RL].[ID], cast([RL].[REVENUEID] as varchar(36)) as [REVENUEID], [RL].[LETTERCODEID], [RL].[PROCESSDATE], [RL].[ACKNOWLEDGEDATE], ' + @ALIAS + '.[MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID], ' + @ALIAS + '.[MKTSEGMENTATIONID], ' + @ALIAS + '.[MKTSEGMENTID], ' + @PACKAGESELECT + ', [RL].[ADDEDBYID], [RL].[CHANGEDBYID], [RL].[DATEADDED], [RL].[DATECHANGED], [RL].[TS], [RL].[TSLONG]' + char(13) +
                      '  from dbo.[' + @REVENUELETTERTABLENAME + '] as [RL]';

    set @SQLAUDIT = @SQLAUDIT + '  select cast(''' + cast(@RECORDSOURCEID as varchar(36)) + ''' as uniqueidentifier) as [RECORDSOURCEID], [RLA].[AUDITID], [RLA].[AUDITRECORDID], [RLA].[AUDITKEY], [RLA].[AUDITCHANGEAGENTID], [RLA].[AUDITDATE], [RLA].[AUDITTYPECODE], [RLA].[AUDITTYPE], cast([RLA].[REVENUEID] as varchar(36)) as [REVENUEID], [RLA].[LETTERCODEID], [RLA].[PROCESSDATE], [RLA].[ACKNOWLEDGEDATE], ' + @ALIAS + '.[MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID], ' + @ALIAS + '.[MKTSEGMENTATIONID], ' + @ALIAS + '.[MKTSEGMENTID], ' + @PACKAGESELECT + ', [RLA].[ADDEDBYID], [RLA].[CHANGEDBYID], [RLA].[DATEADDED], [RLA].[DATECHANGED]' + char(13) +
                                '  from dbo.[' + @REVENUELETTERTABLENAME + 'AUDIT] as [RLA]';

    if dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1
      begin
        set @SQL = replace(@SQL, @ALIAS, '[RLM]') + char(13) +
                   '  inner join dbo.[REVENUELETTERMARKETING] as [RLM] on [RLM].[ID] = [RL].[ID]';

        set @SQLAUDIT = replace(@SQLAUDIT, @ALIAS, '[RLMA]') + char(13) +
                        '  inner join dbo.[REVENUELETTERMARKETINGAUDIT] as [RLMA] on [RLMA].[AUDITRECORDID] = [RLA].[AUDITRECORDID]';
      end
    else
      begin
        set @SQL = replace(@SQL, @ALIAS, '[RL]');
        set @SQLAUDIT = replace(@SQLAUDIT, @ALIAS, '[RLA]');
      end

    set @NEEDUNION = 1;

    fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @REVENUELETTERTABLENAME;
  end

  close RECORDSOURCECURSOR;
  deallocate RECORDSOURCECURSOR;

  --If no record sources exist, create empty views with the same column names and datatypes...

  if @NEEDUNION = 0
    begin
      set @SQL = @SQL + '  select cast(null as uniqueidentifier) as [RECORDSOURCEID], cast(null as uniqueidentifier) as [ID], cast(null as varchar(36)) as [REVENUEID], cast(null as uniqueidentifier) as [LETTERCODEID], cast(null as datetime) as [PROCESSDATE], cast(null as datetime) as [ACKNOWLEDGEDATE], cast(null as uniqueidentifier) as [MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID], cast(null as uniqueidentifier) as [MKTSEGMENTATIONID], cast(null as uniqueidentifier) as [MKTSEGMENTID], cast(null as uniqueidentifier) as [MKTPACKAGEID], cast(null as uniqueidentifier) as [ADDEDBYID], cast(null as uniqueidentifier) as [CHANGEDBYID], cast(null as datetime) as [DATEADDED], cast(null as datetime) as [DATECHANGED], cast(null as timestamp) as [TS], cast(null as bigint) as [TSLONG]';
      set @SQLAUDIT = @SQLAUDIT + '  select cast(null as uniqueidentifier) as [RECORDSOURCEID], cast(null as uniqueidentifier) as [AUDITID], cast(null as uniqueidentifier) as [AUDITRECORDID], cast(null as uniqueidentifier) as [AUDITKEY], cast(null as uniqueidentifier) as [AUDITCHANGEAGENTID], cast(null as datetime) as [AUDITDATE], cast(null as tinyint) as [AUDITTYPECODE], cast(null as nvarchar(13)) as [AUDITTYPE], cast(null as varchar(36)) as [REVENUEID], cast(null as uniqueidentifier) as [LETTERCODEID], cast(null as datetime) as [PROCESSDATE], cast(null as datetime) as [ACKNOWLEDGEDATE], cast(null as uniqueidentifier) as [MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID], cast(null as uniqueidentifier) as [MKTSEGMENTATIONID], cast(null as uniqueidentifier) as [MKTSEGMENTID], cast(null as uniqueidentifier) as [MKTPACKAGEID], cast(null as uniqueidentifier) as [ADDEDBYID], cast(null as uniqueidentifier) as [CHANGEDBYID], cast(null as datetime) as [DATEADDED], cast(null as datetime) as [DATECHANGED]';
    end

  --Create/alter the two views...

  exec (@SQL);
  exec (@SQLAUDIT);

  return 0;