USP_MKTUPDATEMAILINGCOUNTS_VALIDATEIMPORTTABLE
Validates that the finder numbers/source codes provided exists in the marketing effort.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@IMPORTTABLENAME | nvarchar(128) | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTUPDATEMAILINGCOUNTS_VALIDATEIMPORTTABLE]
(
@ID uniqueidentifier,
@IMPORTTABLENAME nvarchar(128)
)
as
set nocount on;
declare @SEGMENTATIONID uniqueidentifier;
declare @DATATABLENAME nvarchar(128);
declare @CHECKDIGIT bit;
declare @SQL nvarchar(max);
select
@SEGMENTATIONID = [SEGMENTATIONID],
@DATATABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([SEGMENTATIONID]),
@CHECKDIGIT = (case when exists(select * from dbo.[MKTSEGMENTATIONFINDERNUMBER] where [SEGMENTATIONID] = [MKTUPDATEMAILINGCOUNTSPROCESS].[SEGMENTATIONID] and [CHECKDIGIT] = 1) then 1 else 0 end)
from dbo.[MKTUPDATEMAILINGCOUNTSPROCESS]
where [ID] = @ID;
--Add an index on the FINDERNUMBER column to make the validation below faster...
set @SQL = 'create nonclustered index [IX_' + replace(@IMPORTTABLENAME, '#', '') + '_FINDERNUMBER] on dbo.[' + @IMPORTTABLENAME + '] ([FINDERNUMBER] asc)';
exec (@SQL);
--Exception: InvalidFinderNumber - Finder number format is invalid
set @SQL = 'update dbo.[' + @IMPORTTABLENAME + '] set' + char(13) +
' [EXCEPTIONCODE] = 16' + char(13) +
'where [FINDERNUMBER] like ''%[^0-9]%''' + char(13) +
'and [EXCEPTIONCODE] = 0';
exec (@SQL);
--Exception: BadFinderNumber - Finder number not in marketing effort. (Part 1 of 2)
--Yes, we are checking this exception twice, but two different ways...
--This way just checks that the finder number is within the proper ranges so that we can properly validate the check-digits next.
set @SQL = 'update dbo.[' + @IMPORTTABLENAME + '] set' + char(13) +
' [EXCEPTIONCODE] = 3' + char(13) +
'from dbo.[' + @IMPORTTABLENAME + '] as [EXCLUDE]' + char(13) +
'left join dbo.[MKTSEGMENTATIONFINDERNUMBER] on ' + (case when @CHECKDIGIT = 1 then '(cast([EXCLUDE].[FINDERNUMBER] as bigint) / 10)' else '[EXCLUDE].[FINDERNUMBER]' end) + ' between [MKTSEGMENTATIONFINDERNUMBER].[MIN] and [MKTSEGMENTATIONFINDERNUMBER].[MAX] and [MKTSEGMENTATIONFINDERNUMBER].[SEGMENTATIONID] = @SEGMENTATIONID' + char(13) +
'where [MKTSEGMENTATIONFINDERNUMBER].[ID] is null' + char(13) +
'and [EXCLUDE].[EXCEPTIONCODE] = 0';
exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID;
--Exception: FailedCheckDigit - Failed check digit.
if @CHECKDIGIT = 1
begin
set @SQL = 'update dbo.[' + @IMPORTTABLENAME + '] set' + char(13) +
' [EXCEPTIONCODE] = 2' + char(13) +
'where [EXCEPTIONCODE] = 0' + char(13) +
'and dbo.[UFN_MKTFINDERNUMBER_VALIDATE_MOD10]([FINDERNUMBER]) = 0';
exec (@SQL);
end
--Exception: BadFinderNumber - Finder number not in marketing effort. (Part 2 of 2)
--Yes, we are checking this exception twice, but two different ways...
--This way just checks that the finder number is actually in the mailing data table so that it can be removed.
set @SQL = 'update dbo.[' + @IMPORTTABLENAME + '] set' + char(13) +
' [EXCEPTIONCODE] = 3' + char(13) +
'from dbo.[' + @IMPORTTABLENAME + '] as [EXCLUDE]' + char(13) +
'left join dbo.[' + @DATATABLENAME + '] as [DATA] on [DATA].[FINDERNUMBER] = cast([EXCLUDE].[FINDERNUMBER] as bigint)' + char(13) +
'left join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [DATA].[SEGMENTID]' + char(13) +
'where ([DATA].[FINDERNUMBER] is null or [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 1)' + char(13) +
'and [EXCLUDE].[EXCEPTIONCODE] = 0';
exec (@SQL);
--Exception: DuplicateFinderNumber - Duplicate finder number imported.
set @SQL = 'with [INVALID] ([FINDERNUMBER]) as' + char(13) +
'(' + char(13) +
' select [FINDERNUMBER]' + char(13) +
' from dbo.[' + @IMPORTTABLENAME + ']' + char(13) +
' group by [FINDERNUMBER]' + char(13) +
' having count([FINDERNUMBER]) > 1' + char(13) +
')' + char(13) +
'update dbo.[' + @IMPORTTABLENAME + '] set' + char(13) +
' [EXCEPTIONCODE] = 1' + char(13) +
'from dbo.[' + @IMPORTTABLENAME + '] as [EXCLUDE]' + char(13) +
'inner join [INVALID] on [INVALID].[FINDERNUMBER] = [EXCLUDE].[FINDERNUMBER]' + char(13) +
'where [EXCLUDE].[EXCEPTIONCODE] = 0';
exec (@SQL);
return 0;