Sie sind auf Seite 1von 13

USE [2.4.7.

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

CREATE PROCEDURE [client].[APPLY_SCRUB_RULES_ON_IMPORT_DATA]


AS
BEGIN
--DECLARE VARIBLES
Declare @MinIndex Int,
@MaxIndex Int,
@Index Int,
@FileId bigint,
@CreateNonExistingSubscriber BIT,
@UniqueKey nvarchar(50),
@TSql nvarchar(max),
@BatchCount int = 1000,
@TemporaryTableName nvarchar(260) = 'TempTable_' + Cast(dbo.GET_TIME
_IN_TICKS(GetDate()) as varchar(20)),
@AttrColNum Int,
@FunctionName varchar(1000),
@ColumnName varchar(100),
@ScrubRuleID Int,
@ScrubRuleTypeId Int,
@Delimiter Char(1),
@Regex varchar(1000),
@EnumerationID Int,
@IsOverwriteAllowed bit,
@FunctionText varchar(1000),
@AttrColNum1
@AttrColNum2
@AttrColNum3
@AttrColNum4
@AttrColNum5
@AttrColNum6
@AttrColNum7
@AttrColNum8

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 + ' ';

Select @TSql = @TSql + 'Where ID Not in (select ID from


[client].[Scrub_Data]);';
print @TSql
EXEC sp_executesql @TSql
--ALWAYS APPLY SCRUB RULE 'VALIDATE CELL NUMBER' ON Cell
NumberColumn
SELECT @ScrubRuleID = 1 --Validate Cell Number ScrubRule
ID
SELECT
@Regex = [Expression],
@FunctionName = FunctionName,
@FunctionText = FunctionName + '(SDT.[ClientUniqueKe
y]' + ', ''' + [Expression] + ''')'
From [client].[Scrub_rules]
Inner Join data_formats on FormatID = DataFormatID
Where RuleID = @ScrubRuleID
Select @TSql = N'Insert Into [client].[Scrub_Data_Log]([
ImportID], [ScrubRuleID], [ColumnName], [Value], [CleansedValue], [AttrColumnNam
e], [IsProcessed], [Reason], [Status]) ';
Select @TSql = @TSql + 'Select SDT.ID, '
Select @TSql = @TSql + CONVERT(varchar,@ScrubRuleID) + '
, ';
Select @TSql = @TSql + '''' + @UniqueKey + ''', '
Select @TSql = @TSql + 'SDT.[ClientUniqueKey], ';
Select @TSql = @TSql + @FunctionText + ', ';
Select @TSql = @TSql + '''[ClientUniqueKey]'', ';
Select @TSql = @TSql + 'Case When SR.IsBlocking = 1 And
' + @FunctionText + ' = 0 Then ' + CONVERT(varchar,@ProcStateProcErr) + ' Else '
+ CONVERT(varchar,@ProcStateSucc) + ' End, ';
Select @TSql = @TSql + 'Case When ' + @FunctionText + '
= 0 Then SR.FailureMessage + '';'' End, ';
Select @TSql = @TSql + 'Case When SR.IsBlocking = 1 And
' + @FunctionText + ' = 0 Then ''Failed'' ';
Select @TSql = @TSql + '
When SR.IsBlocking = 0
And ' + @FunctionText + ' = 0 Then ''Validation Failed'' ';
Select @TSql = @TSql + '
Else '''' End ';
Select @TSql = @TSql + 'FROM [client].[Scrub_Data] SDT '
;
Select @TSql = @TSql + 'Inner Join [client].[Scrub_Rules
] SR On SR.RuleID = ' + CONVERT(varchar,@ScrubRuleID) + ' And SR.RuletypeId = 1
';
Select @TSql = @TSql + 'Where SDT.[IsProcessed] = ' + CO
NVERT(varchar,@ProcStateUnProc)+ ' And SDT.[ClientUniqueKey] IS NOT NULL And SDT
.ID In (Select Id from ##' + @TemporaryTableName + ');';
print @TSql
EXEC sp_executesql @TSql
--UPDATE ISPROCESSED IN SCRUB_DATA WHEN CLEANSEDVALUE =
0 AND SCRUB RULE IS BLOCKING
Select @TSql = N'Update SDT ';
Select @TSql = @TSql + 'Set [IsProcessed] = ' + CONVERT(
varchar,@ProcStateProcErr) + ' , [ProcessingStatus] = SH.[Status], [ProcessFailu
reReason] = SH.[Reason] ';
Select @TSql = @TSql + 'FROM [client].[Scrub_Data] SDT I
nner Join [client].[Scrub_Data_Log] SH On SDT.ID = SH.ImportID And SH.ScrubRuleI

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) + ')';

Select @TSql = N'Insert Into [client].[Scrub_Data_Log]([ImportID], [ScrubRuleID]


, [ColumnName], [Value], [CleansedValue], [AttrColumnName], [IsProcessed], [Reas
on], [Status]) ';
SELECT @TSql = @TSql + 'Select SDT.ID, ';
Select @TSql = @TSql + CONVERT(varchar,@ScrubRuleID) + ', ';
SELECT @TSql = @TSql + '''' + @ColumnName + ''', ';
SELECT @TSql = @TSql + 'SDT.[Attr' + CONVERT(varchar, @AttrColNum) + '], ';
Select @TSql = @TSql + @FunctionText + ', ';
Select @TSql = @TSql + '''[Attr' + CONVERT(varchar, @AttrColNum) + ']'', ';
Select @TSql = @TSql + 'Case When SR.IsBlocking = 1 And ' + @FunctionText + ' =
0 Then ' + CONVERT(varchar,@ProcStateProcErr) + ' Else ' + CONVERT(varchar,@Proc
StateSucc) + ' End, ';
Select @TSql = @TSql + 'Case When ' + @FunctionText + ' = 0 Then SR.FailureMessa
ge + '';'' End, ';
Select @TSql = @TSql + 'Case When SR.IsBlocking = 1 And ' + @FunctionText + ' =
0 Then ''Failed'' ';
Select @TSql = @TSql + '
When SR.IsBlocking = 0 And ' + @FunctionText +
' = 0 Then ''Validation Failed'' ';
Select @TSql = @TSql + '

Else '''' End ';

Select @TSql = @TSql + 'FROM [client].[Scrub_Data] SDT ';


Select @TSql = @TSql + 'Inner Join [client].[Scrub_Rules] SR On SR.RuleID = ' +
CONVERT(varchar,@ScrubRuleID) + ' And SR.RuletypeId = 1';
Select @TSql = @TSql + 'Where SDT.[IsProcessed] = ' + CONVERT(varchar,@ProcState
UnProc)+ ' And SDT.[Attr' + CONVERT(varchar, @AttrColNum) + '] IS NOT NULL AND '
;
Select @TSql = @TSql + 'SDT.ID In (Select Id from ##' + @TemporaryTableName + ')
;';
print @TSql
EXEC sp_executesql @TSql
END
--CLEANSE SCRUB RULE TYPE WHICH RETURNS SUBSTITUTION VALUE.
ELSE IF (@ScrubRuleTypeId = 2)
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) + ')';
Select @TSql = N'Insert Into [client].[Scrub_Data_Log]([ImportID], [ScrubRuleID]
, [ColumnName], [Value], [CleansedValue], [AttrColumnName]) ';
SELECT @TSql = @TSql + 'Select SDT.ID, ';
Select @TSql = @TSql + CONVERT(varchar,@ScrubRuleID) + ', ';
SELECT @TSql = @TSql + '''' + @ColumnName + ''', ';
SELECT @TSql = @TSql + 'SDT.[Attr' + CONVERT(varchar, @AttrColNum) + '], ';
Select @TSql = @TSql + @FunctionText + ', ';
Select @TSql = @TSql + '''[Attr' + CONVERT(varchar, @AttrColNum) + ']'' ';
Select @TSql = @TSql + 'FROM [client].[Scrub_Data] SDT ';
Select @TSql = @TSql + 'Where SDT.[IsProcessed] = ' + CONVERT(varchar,@ProcState
UnProc)+ ' And SDT.[Attr' + CONVERT(varchar, @AttrColNum) + '] IS NOT NULL AND '
;
Select @TSql = @TSql + 'SDT.ID In (Select Id from ##' + @TemporaryTableName + ')
;';
print @TSql
EXEC sp_executesql @TSql

--CLEANSED IMPORT DATA


--UPDATE ATTRIBUTES COLUMNS IN SCRUB_DATA WITH CLEANSEDVALUE IN SCRUB_DATA_LOG
Select @TSql = N'Update SDT ';
Select @TSql = @TSql + 'Set [Attr' + CONVERT(varchar, @AttrColNum) + '] = [Clean
sedValue] '
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 ID In (Select Id from ##' + @TemporaryTableName + '
) And SR.RuletypeId = 2;';

print @TSql
EXEC sp_executesql @TSql

--UPDATE ISPROCESSED WITH SUCCESS STATUS IN SCRUB_DATA_LOG


Select @TSql = N'Update SH ';
Select @TSql = @TSql + 'Set [IsProcessed] = ' + CONVERT(varchar,@ProcStateSucc)
+ ' ';
Select @TSql = @TSql + 'FROM [client].[Scrub_Data_Log] SH ';
Select @TSql = @TSql + 'Inner Join [client].[Scrub_Rules] SR On SH.ScrubRuleID =
SR.RuleID And SH.ScrubRuleID = ' + CONVERT(varchar,@ScrubRuleID );
Select @TSql = @TSql + ' Where SH.[IsProcessed] = ' + CONVERT(varchar,@ProcState
UnProc)
Select @TSql = @TSql + ' And ImportID In (Select Id from ##' + @TemporaryTableNa
me + ') And SR.RuletypeId = 2;';
print @TSql
EXEC sp_executesql @TSql
END
--SPLIT SCRUB RULE TYPE WHICH RETURNS MULTIPLE VALUES.
ELSE IF (@ScrubRuleTypeId = 3)
BEGIN
DECLARE @OutputColumnList VARCHAR(MAX) = null,
@OutputColumnFilter VARCHAR(MAX) = null,
@OutputColumnCount INT = 0
SELECT
@OutputColumnList = COALESCE(@OutputColumnList + ',' ,'') + Name,
@OutputColumnFilter = COALESCE(@OutputColumnFilter + ' AND ' ,'') + Name + ' IS
NOT NULL ',
@OutputColumnCount = ISNULL(@OutputColumnCount, 0) + 1
FROM sys.columns
WHERE object_id=object_id(@FunctionName)

--INSERT RECORDS INTO SCRUB_DATA_LOG FROM SCRUB_DATA


--SCRUB_DATA_LOG ALSO CONTAINS THE CLEANSED VALUE
Select @TSql = N'Insert Into [client].[Scrub_Data_Log]([ImportID], [ScrubRuleID]
, [ColumnName], [Value], [CleansedValue], [AttrColumnName]';
IF (@OutputColumnCount >= 1) Select @TSql = @TSql + ', [CleansedValue1]';
IF (@OutputColumnCount >= 2) Select @TSql = @TSql + ', [CleansedValue2]';
IF (@OutputColumnCount >= 3) Select @TSql = @TSql + ', [CleansedValue3]';
IF (@OutputColumnCount >= 4) Select @TSql = @TSql + ', [CleansedValue4]';
IF (@OutputColumnCount >= 5) Select @TSql = @TSql + ', [CleansedValue5]';
IF (@OutputColumnCount >= 6) Select @TSql = @TSql + ', [CleansedValue6]';
IF (@OutputColumnCount >= 7) Select @TSql = @TSql + ', [CleansedValue7]';
IF (@OutputColumnCount >= 8) Select @TSql = @TSql + ', [CleansedValue8]';
IF (@OutputColumnCount >= 9) Select @TSql = @TSql + ', [CleansedValue9]';
Select @TSql = @TSql + ') Select SDT.ID, ' + CONVERT(varchar,@ScrubRuleID) +
', ''' + @ColumnName + ''', SDT.[Attr' + CONVERT(varchar, @AttrColNum) + '],';
Select @TSql = @TSql + 'SDT.[Attr' + CONVERT(varchar, @AttrColNum) + '], ''[Attr
' + CONVERT(varchar, @AttrColNum) + ']'', ' + @OutputColumnList;
Select @TSql = @TSql + ' FROM [client].[Scrub_Data] SDT Cross Apply ' + @Functio
nName + '(SDT.[Attr' + CONVERT(varchar, @AttrColNum) + ']';
IF (@Delimiter is not null) Select @TSql = @TSql + ', ''' + @Delimiter + ''') ';
ELSE Select @TSql = @TSql + ')';
Select @TSql = @TSql + 'Where SDT.[IsProcessed] = ' + CONVERT(varchar,@ProcState
UnProc)+ ' And ' + @OutputColumnFilter + ' And SDT.ID In (Select Id from ##' + @
TemporaryTableName + ');';
print @TSql
EXEC sp_executesql @TSql

--CLEANSED IMPORT DATA


--UPDATE ATTRIBUTES COLUMNS IN SCRUB_DATA WITH CLEANSEDVALUE IN SCRUB_DATA_LOG
Select @TSql = N'Update SDT ';
Select @TSql = @TSql + 'Set [Attr' + CONVERT(varchar, @AttrColNum) + '] = [Clean

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

--UPDATE ISPROCESSED WITH SUCCESS STATUS IN SCRUB_DATA_LOG


Select @TSql = N'Update SH ';
Select @TSql = @TSql + 'Set SH.[IsProcessed] = ' + CONVERT(varchar,@ProcStateSuc
c) + ' ';
Select @TSql = @TSql + 'FROM [client].[Scrub_Data_Log] SH ';
Select @TSql = @TSql + 'Inner Join [client].[Scrub_Rules] SR On SH.ScrubRuleID =
SR.RuleID And SH.ScrubRuleID = ' + CONVERT(varchar,@ScrubRuleID )
Select @TSql = @TSql + ' Where SH.[IsProcessed] = ' + CONVERT(varchar,@ProcState

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

##' + @TemporaryTableName + ');';


print @TSql
EXEC sp_executesql @TSql
COMMIT
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
Print ERROR_MESSAGE()
Select @TSql = N'Update SDT '
Select @TSql = @TSql + '[IsProcessed] = ' + CONV
ERT(varchar,@ProcStateProcErr) + ' , [ProcessFailureReason] = ''' + ERROR_MESSAG
E() + ''' ';
Select @TSql = @TSql + 'FROM [client].[Import_Da
ta] SDT Inner Join [client].[Scrub_Data] SDS On SDT.ID = SDS.ID ';
Select @TSql = @TSql + 'Where SDT.[IsProcessed]
= ' + CONVERT(varchar,@ProcStateUnProc)+ ' And SDT.ID In (Select Id from ##' + @
TemporaryTableName + ');';
print @TSql
EXEC sp_executesql @TSql
END CATCH
END
--UPDATE ISPROCESSED WITH SUCCESS STATUS IN IMPORTFILES
SELECT @TSql = 'Update [client].[ImportFiles] '
SELECT @TSql = @TSql + 'Set [IsProcessed] = ' + Convert(nvarchar
,@ProcStateSucc)
SELECT @TSql = @TSql + ' Where FileId = ' + Convert(nvarchar,@Fi
leId) + ';'
print @TSql
EXEC sp_executesql @TSql
END
END
GO

Das könnte Ihnen auch gefallen