La transformation de search SSIS ne capture pas les valeurs non correspondantes

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:

entrez la description de l'image ici

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:

entrez la description de l'image ici

Ensuite, nous allons dans la transformation dans laquelle je redirige les lignes qui ne correspondent pas à la No Match Output

entrez la description de l'image ici

La connection ici est à production et la requête ici est encore dynamic car la colonne Region n'existe pas en production.

entrez la description de l'image ici

Affichage de l'expression de la requête SQL de search:

entrez la description de l'image ici

 "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;" 

entrez la description de l'image ici

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.

entrez la description de l'image ici

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)