USP_MKTREVENUERECEIPT_CREATEORUPDATEVIEWS

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

Definition

Copy


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

  declare @SQL nvarchar(max);
  declare @SQLAUDIT nvarchar(max);
  declare @RECORDSOURCEID uniqueidentifier;
  declare @REVENUERECEIPTTABLENAME nvarchar(128);
  declare @NEEDUNION bit;
  declare @STATUSIDFIELD nvarchar(255);
  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_MKTREVENUERECEIPT')
    set @SQL = 'alter ';
  else
    set @SQL = 'create ';
  set @SQL = @SQL + 'view dbo.[V_MKTREVENUERECEIPT]' + char(13) + 'as' + char(13);

  if exists(select 1 from INFORMATION_SCHEMA.VIEWS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = 'V_MKTREVENUERECEIPTAUDIT')
    set @SQLAUDIT = 'alter ';
  else
    set @SQLAUDIT = 'create ';
  set @SQLAUDIT = @SQLAUDIT + 'view dbo.[V_MKTREVENUERECEIPTAUDIT]' + 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_MKTREVENUERECEIPT_MAKETABLENAME]([ID])
    from dbo.[MKTGIFTRECORDSOURCE]
    where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([ID]) = 1;

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

  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

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

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

    if dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1
      begin
        set @SQL = replace(@SQL, '[RR].[PROCESSDATE]', '[RR].[RECEIPTPROCESSDATE] as [PROCESSDATE]');
        set @SQL = replace(@SQL, @ALIAS, '[RRM]') + char(13) +
                   '  inner join dbo.[REVENUERECEIPTMARKETING] as [RRM] on [RRM].[ID] = [RR].[ID]';

        set @SQLAUDIT = replace(@SQLAUDIT, '[RRA].[PROCESSDATE]', '[RRA].[RECEIPTPROCESSDATE] as [PROCESSDATE]');
        set @SQLAUDIT = replace(@SQLAUDIT, @ALIAS, '[RRMA]') + char(13) +
                        '  inner join dbo.[REVENUERECEIPTMARKETINGAUDIT] as [RRMA] on [RRMA].[AUDITRECORDID] = [RRA].[AUDITRECORDID]';
      end
    else
      begin
        set @SQL = replace(@SQL, @ALIAS, '[RR]');
        set @SQLAUDIT = replace(@SQLAUDIT, @ALIAS, '[RRA]');
      end

    set @NEEDUNION = 1;

    fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @REVENUERECEIPTTABLENAME;
  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 int) as [RECEIPTNUMBER], cast(null as datetime) as [PROCESSDATE], cast(null as datetime) as [RECEIPTDATE], cast(null as uniqueidentifier) as [MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID], cast(null as uniqueidentifier) as [MKTSEGMENTATIONID], cast(null as uniqueidentifier) as [MKTSEGMENTID], 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 int) as [RECEIPTNUMBER], cast(null as datetime) as [PROCESSDATE], cast(null as datetime) as [RECEIPTDATE], cast(null as uniqueidentifier) as [MKTACKNOWLEDGEMENTMAILINGPROCESSSTATUSID], cast(null as uniqueidentifier) as [MKTSEGMENTATIONID], cast(null as uniqueidentifier) as [MKTSEGMENTID], 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;