Beruflich Dokumente
Kultur Dokumente
1Test]
GO
/****** Object: StoredProcedure [client].[APPLY_SCRUB_RULES_ON_IMPORT_DATA]
Script Date: 09/29/2014 14:18:28 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[client].[AP
PLY_SCRUB_RULES_ON_IMPORT_DATA]') AND type in (N'P', N'PC'))
DROP PROCEDURE [client].[APPLY_SCRUB_RULES_ON_IMPORT_DATA]
GO
USE [2.4.7.1Test]
GO
/****** Object: StoredProcedure [client].[APPLY_SCRUB_RULES_ON_IMPORT_DATA]
Script Date: 09/29/2014 14:18:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Int,
Int,
Int,
Int,
Int,
Int,
Int,
Int,
@AttrColNum9 Int;
--DEFINE AND ASSIGN VALUES FOR PROCESSING STATE
Declare
@ProcStateUnProc int
= 0,
@ProcStateLaterProc int
= 1,
@ProcStateSucc int
= 2,
@ProcStateProcErr int
= 3,
@ProcStateJliSales int
= 4
--TODO WHILE IMPORT FILES STATUS IS LATER PROCESSED
WHILE((select count(*) from [client].[ImportFiles] where IsProcessed = @Proc
StateLaterProc) > 0 )
BEGIN
Select Top 1
@FileId = FileID,
@CreateNonExistingSubscriber = CreateNonExistingSubscriber,
@UniqueKey = CellNumberColumn
From [client].[ImportFiles]
Where [IsProcessed] = @ProcStateLaterProc
--DUMP [FILEMAPPING] IN TEMP TABLE
IF OBJECT_ID('tempdb..#TempMapping') IS NOT NULL
BEGIN
DROP TABLE #TempMapping;
END;
Select
ROW_NUMBER() over (order by SDLT.ComSubAttrID) as RowNum,
CSA.Name,
SDLT.AttrColNum,
SR.*,
DF.Expression,
FM.IsOverwriteAllowed,
SDLT1.AttrColNum as AttrColNum1,
SDLT2.AttrColNum as AttrColNum2,
SDLT3.AttrColNum as AttrColNum3,
SDLT4.AttrColNum as AttrColNum4,
SDLT5.AttrColNum as AttrColNum5,
SDLT6.AttrColNum as AttrColNum6,
SDLT7.AttrColNum as AttrColNum7,
SDLT8.AttrColNum as AttrColNum8,
SDLT9.AttrColNum as AttrColNum9
INTO #TempMapping
from [client].[FileMapping] FM
Inner Join [client].[data_loader_mapping] SDLT
On FM.CompanySubcriberAttributeID = SDLT.ComSubAttrID
Inner Join [dbo].[company_subscriber_attributes] CSA
on FM.CompanySubcriberAttributeID = CSA.AttributeID
Left Join [client].[Scrub_Rules] SR
on FM.ScrubRuleID = SR.RuleID
Left Join dbo.data_formats DF
on SR.DataFormatID = DF.FormatID
Left Join [client].[data_loader_mapping] SDLT1
On FM.CompanySubcriberAttributeID1 = SDLT1.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT2
On FM.CompanySubcriberAttributeID2 = SDLT2.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT3
On FM.CompanySubcriberAttributeID3 = SDLT3.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT4
On FM.CompanySubcriberAttributeID4 = SDLT4.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT5
On FM.CompanySubcriberAttributeID5 = SDLT5.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT6
On FM.CompanySubcriberAttributeID6 = SDLT6.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT7
On FM.CompanySubcriberAttributeID7 = SDLT7.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT8
On FM.CompanySubcriberAttributeID8 = SDLT8.ComSubAttrID
Left Join [client].[data_loader_mapping] SDLT9
On FM.CompanySubcriberAttributeID9 = SDLT9.ComSubAttrID
Where FM.FileID = @FileId
Order By SDLT.AttrColNum, RuleTypeID
--ASSIGN VALUES FOR MinIndex, @MaxIndex
Select
@MinIndex = MIN(RowNum),
@MaxIndex= Max(RowNum)
From #TempMapping
--TODO WHILE IMPORT_DATA IS UNPROCESSED
WHILE((Select count(*) from [client].[Import_Data] where IsProcessed = @
ProcStateUnProc) > 0 )
BEGIN
BEGIN TRY
BEGIN TRANSACTION
BEGIN
IF OBJECT_ID('tempdb..##' + @TemporaryTableName) IS NOT
NULL
BEGIN
SELECT @Tsql = N'DROP TABLE ##' + @TemporaryTableNam
e
EXEC sp_executesql @Tsql
END;
--DUMP BATCH ROWS IN TEMP STAGING ROWS
Select @TSql = N'SELECT Top ' + CONVERT(varchar, @BatchC
ount) + ' * INTO ##' + @TemporaryTableName + ' FROM [client].[Import_Data] ';
Select @TSql = @TSql + 'Where [IsProcessed] = ' + CONVER
T(varchar,@ProcStateUnProc)
SELECT @TSql = @TSql + ' And FileId = ' + Convert(nvarch
ar,@FileId) + ';';
print @TSql
EXEC sp_executesql @TSql
--INSERT RECORDS INTO SCRUB_DATA FROM TEMP STAGING ROWS
IF NOT EXISTS
Select @TSql = N'Insert Into [client].[Scrub_Data] ';
Select @TSql = @TSql + 'select * from ##' + @TemporaryTa
bleName + ' ';
D = ' + CONVERT(varchar,@ScrubRuleID );
Select @TSql = @TSql + ' Where SH.[IsProcessed] = ' + CO
NVERT(varchar,@ProcStateProcErr) + ' And SDT.ID In (Select Id from ##' + @Tempor
aryTableName + ');'
print @TSql
EXEC sp_executesql @TSql
--FORMAT CELL NUM TO TEXT FORMAT
Select @TSql = N'Update [client].[Scrub_Data] ';
Select @TSql = @TSql + 'Set CleanedCellNum = ''03'' + RI
GHT([dbo].[RemoveNonNumericCharacters](ClientUniqueKey), 9) ';
Select @TSql = @TSql + 'Where IsProcessed = ' + CONVERT(
varchar,@ProcStateUnProc) + ' ';
Select @TSql = @TSql + 'And ID In (Select Id from ##' +
@TemporaryTableName + ')';
print @TSql
EXEC sp_executesql @TSql
--UPDATE ISPROCESSED WITH ERROR
STATUS IN SCRUB_DATA WHEN @CREATENONEXISTINGSUBSCRIBER IS FALSE AND SUBSCRIBER N
OT EXISTS IN THE SYSTEM
Select @TSql = N'Update [client]
.[Scrub_Data] '
Select @TSql = @TSql + 'Set [IsP
rocessed] = ' + CONVERT(varchar,@ProcStateProcErr);
Select @TSql = @TSql + ', [Proce
ssFailureReason] = ''Do Not Create Non Existing Subscriber'', [ProcessingStatus]
= ''Failed'' ';
Select @TSql = @TSql + 'WHERE NO
T EXISTS (SELECT 1 FROM [dbo].[subscribers] as S WHERE CleanedCellNum = S.CellNu
mber ) ';
Select @TSql = @TSql + 'AND ' +
CONVERT(varchar,@CreateNonExistingSubscriber) + ' = 0 And ID In (Select Id from
##' + @TemporaryTableName + ');';
print @TSql
EXEC sp_executesql @TSql
SELECT @Index = @MinIndex;
WHILE @Index <= @MaxIndex
BEGIN
SELECT
@AttrColNum = At
trColNum,
@FunctionName =
FunctionName,
@ColumnName = Na
me,
@ScrubRuleID = R
uleID,
@ScrubRuleTypeId
= RuleTypeID,
@Delimiter = Del
imiter,
@Regex = Express
ion,
@EnumerationID =
EnumerationID,
@IsOverwriteAllo
wed = IsOverwriteAllowed,
@AttrColNum1 = A
ttrColNum1,
@AttrColNum2 = A
ttrColNum2,
@AttrColNum3 = A
ttrColNum3,
@AttrColNum4 = A
ttrColNum4,
@AttrColNum5 = A
ttrColNum5,
@AttrColNum6 = A
ttrColNum6,
@AttrColNum7 = A
ttrColNum7,
@AttrColNum8 = A
ttrColNum8,
@AttrColNum9 = A
ttrColNum9
FROM #TempMapping
WHERE RowNum = @Index
IF (@IsOverwriteAllowed
= 1)
BEGIN
IF (@Scr
ubRuleID is null)
BEGIN
--NO ACTION
Select @ScrubRuleID
END
ELSE
BEGIN
--VALIDATE SCRUB RULE TYPE WHICH RETURNS TRUE/FALSE VALUE.
IF (@ScrubRuleTypeId = 1)
BEGIN
SELECT @FunctionText = @FunctionName + '(SDT.[Attr' + CONVERT(varchar, @AttrColN
um) + ']'
IF ((@Regex is null OR @Regex = '') And (@EnumerationID is null OR @EnumerationI
D = '')) Select @FunctionText = @FunctionText + ')';
ELSE IF (@Regex is Not null OR @Regex <> '') Select @FunctionText = @FunctionTex
t + ', ''' + @Regex + ''')';
ELSE IF (@EnumerationID is not null OR @EnumerationID <> '') Select @FunctionTex
t = @FunctionText + ', ' + CONVERT(varchar, @EnumerationID) + ')';
print @TSql
EXEC sp_executesql @TSql
sedValue] '
IF (@OutputColumnCount >= 1) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum1) + '] = [CleansedValue1]';
IF (@OutputColumnCount >= 2) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum2) + '] = [CleansedValue2]';
IF (@OutputColumnCount >= 3) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum3) + '] = [CleansedValue3]';
IF (@OutputColumnCount >= 4) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum4) + '] = [CleansedValue4]';
IF (@OutputColumnCount >= 5) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum5) + '] = [CleansedValue5]';
IF (@OutputColumnCount >= 6) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum6) + '] = [CleansedValue6]';
IF (@OutputColumnCount >= 7) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum7) + '] = [CleansedValue7]';
IF (@OutputColumnCount >= 8) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum8) + '] = [CleansedValue8]';
IF (@OutputColumnCount >= 9) Select @TSql = @TSql + ', [Attr' + CONVERT(varchar,
@AttrColNum9) + '] = [CleansedValue9]';
Select @TSql = @TSql + 'FROM [client].[Scrub_Data] SDT Inner Join [client].[Scru
b_Data_Log] SH On SDT.ID = SH.ImportID And SH.ScrubRuleID = ' + CONVERT(varchar
,@ScrubRuleID ) + ' ';
Select @TSql = @TSql + 'Inner Join [client].[Scrub_Rules] SR On SH.ScrubRuleID =
SR.RuleID Where SH.[IsProcessed] = ' + CONVERT(varchar,@ProcStateUnProc);
Select @TSql = @TSql + ' And SDT.ID In (Select Id from ##' + @TemporaryTableName
+ ');';
print @TSql
EXEC sp_executesql @TSql
UnProc)
Select @TSql = @TSql + ' And ImportID In (Select Id from ##' + @TemporaryTableNa
me + ');';
print @TSql
EXEC sp_executesql @TSql
END
END
END
ELSE
BEGIN
--UPDATE ATTRIBUTES COLUMNS IN SCRUB_DATA WI
TH NULL WHEN OVERWRITE IS NOT ALLOWED
Select @TSql = N'Update [client].[Scrub_Data
] ';
Select @TSql = @TSql + 'Set [Attr' + CONVERT
(varchar, @AttrColNum) + '] = Null '
Select @TSql = @TSql + 'Where [IsProcessed]
= ' + CONVERT(varchar,@ProcStateUnProc) + ' And ID In (Select Id from ##' + @Tem
poraryTableName + ');';
print @TSql
EXEC sp_executesql @TSql
END
Set @Index = @Index + 1;
END
--UPDATE ISPROCESSED WITH SUCCESS STATUS IN SCRUB_DATA W
HEN TOTAL COUNT OF SCRUB RULE ON EACH IMPORT DATA ROW = SUM OF SUCCEED SCRUB RUL
E ON EACH IMPORT DATA ROW
Select @TSql = N'Update [client].[Scrub_Data] '
Select @TSql = @TSql + 'Set [IsProcessed] = ' + CONVERT(
varchar,@ProcStateSucc);
Select @TSql = @TSql + ' Where Id In ( Select SDT.ID FRO
M [client].[Scrub_Data] SDT Inner Join [client].[Scrub_Data_Log] SH On SDT.ID =
SH.ImportID Where SDT.ID In (Select Id from ##' + @TemporaryTableName + ') ';
Select @TSql = @TSql + 'Group by SDT.ID Having COUNT(1)
= SUM(Case When SH.IsProcessed = ' + CONVERT(varchar,@ProcStateSucc) + ' Then 1
Else 0 End))';
print @TSql
EXEC sp_executesql @TSql
END
--UPDATE ISPROCESSED WITH ERROR STATUS I
N SCRUB_DATA_LOG
Select @TSql = N'Update SDT '
Select @TSql = @TSql + 'Set [IsProcessed
] = SDS.[IsProcessed] ';
Select @TSql = @TSql + 'FROM [client].[I
mport_Data] SDT Inner Join [client].[Scrub_Data] SDS On SDT.ID = SDS.ID ';
Select @TSql = @TSql + 'Where SDT.[IsPro
cessed] = ' + CONVERT(varchar,@ProcStateUnProc)+ ' And SDT.ID In (Select Id from