J'utilise la transformation de search pour revenir à ma table d'entrepôt de données pour searchr les loggings supprimés de la production, puis les envoyer à une table intermédiaire pour les supprimer de la table datawarehouse.
Logiquement, si un logging est supprimé dans la table de production et existe dans la table datawarehouse, cette search doit le find et le redirect vers No Match Output
correct?
Le problème est que la search ne trouve pas les loggings non correspondants ou que je fais quelque chose en arrière.
Je devrais append que dans la production il y a 4 bases de données identiques pour quatre régions différentes. Mon package traverse chaque boucle en bouclant les strings de connection dans un file de configuration. Ensuite, tous ces loggings sont marqués avec la database dont ils proviennent et ajoutés à la table datawarehouse.
C'est la partie de ma tâche de stream de données qui ne fonctionne pas correctement:
Dans la source OLE DB "Fact Table" je tire les loggings de ma table de faits où la Region
est égale à la région identifiée par la string de connection en utilisant les numbers 1 à 4. Je place la requête dans une variable pour qu'elle puisse être dynamic. Je ne fais que tirer les colonnes qui ne peuvent pas être nulles dans la table de transfert afin de minimiser le montant que je tire et j'ai seulement besoin de la colonne ID et Région pour supprimer les loggings car ils devraient être uniques dans leurs régions respectives.
Dans la variable FindDeletes
:
"SELECT ID , ParentItemID , IsTransPerPiece , PerPieceCostQuantity , PerPieceCost , PerPieceUnitCost , OriginalPerPieceCostQuantity , OriginalTransFee , TransFee , CostTrans , CostLabor , OriginalCostQuantity , OriginalFacilityFees , FacilityFees , Region , HashValue , CreateDate FROM dbo.FactInvoiceWasteManifests WHERE Region = CASE " + (DT_WSTR, 2) @[User::ConnectionSsortingngID] + " WHEN 1 THEN 'NE' WHEN 2 THEN 'BALT' WHEN 3 THEN 'NY' WHEN 4 THEN 'PA' END "
Inside OLE DB Source montrant la requête de variable:
Ensuite, nous allons dans la transformation dans laquelle je redirige les lignes qui ne correspondent pas à la No Match Output
La connection ici est à production et la requête ici est encore dynamic car la colonne Region
n'existe pas en production.
Affichage de l'expression de la requête SQL de search:
"SELECT ID, CASE " + (DT_WSTR, 2) @[User::ConnectionSsortingngID] + " WHEN 1 THEN CAST('NE' AS NVARCHAR(25)) WHEN 2 THEN CAST('BALT' AS NVARCHAR(25)) WHEN 3 THEN CAST('NY' AS NVARCHAR(25)) WHEN 4 THEN CAST('PA' AS NVARCHAR(25)) END AS Region FROM dbo.InvoiceWasteManifests;"
DEMANDE MISE À JOUR:
"SELECT ID, CASE WHEN " + (DT_WSTR, 2) @[User::ConnectionSsortingngID] + "=1 THEN CAST('NE' AS NVARCHAR(25)) WHEN " + (DT_WSTR, 2) @[User::ConnectionSsortingngID] + "=2 THEN CAST('BALT' AS NVARCHAR(25)) WHEN " + (DT_WSTR, 2) @[User::ConnectionSsortingngID] + "=3 THEN CAST('NY' AS NVARCHAR(25)) WHEN " + (DT_WSTR, 2) @[User::ConnectionSsortingngID] + "=4 THEN CAST('PA' AS NVARCHAR(25)) END AS Region FROM dbo.InvoiceWasteManifests;"
Enfin, je rejoins les deux tables sur Region
puis search sur ID. Le résultat est que rien ne se passe et aucun logging n'est redirigé n'importe où.
Il s'avère que je n'ai pas entièrement compris comment fonctionne la transformation de search. J'ai résolu mon problème ce matin en utilisant également la colonne ID
comme une jointure au lieu de la mettre en cache.
C'est la première requête dynamic que vous devez mettre:
--declare @sql varchar(max) --declare @ConnectionSsortingngID varchar(50) =1 set @sql = 'SELECT ID , ParentItemID , IsTransPerPiece , PerPieceCostQuantity , PerPieceCost , PerPieceUnitCost , OriginalPerPieceCostQuantity , OriginalTransFee , TransFee , CostTrans , CostLabor , OriginalCostQuantity , OriginalFacilityFees , FacilityFees , Region , HashValue , CreateDate FROM dbo.FactInvoiceWasteManifests WHERE Region = CASE WHEN ' + @ConnectionSsortingngID + '=1 THEN ''''''''+CAST(''NE'' AS NVARCHAR(25))+'''''''' WHEN ' + @ConnectionSsortingngID + '=2 THEN ''''''''+CAST(''BALT'' AS NVARCHAR(25))+'''''''' WHEN ' + @ConnectionSsortingngID + '=3 THEN ''''''''+CAST(''NY'' AS NVARCHAR(25))+'''''''' WHEN ' + @ConnectionSsortingngID + '=4 THEN ''''''''+CAST(''PA'' AS NVARCHAR(25))+'''''''' END' --print (@Sql)