SSIS Join Recordset With Table

J'ai un packageage SSIS dans lequel je lis les loggings d'un file plat et les stocke dans un jeu d'loggings. Est-il possible de comparer les valeurs dans le jeu d'loggings avec les valeurs dans une table de database et mettre à jour la table?

J'utilise SQL Server 2008 R2 et même version de SSIS.

La réponse de Leran2002 en général est correcte, la manière la plus directe est d'avoir un composant de search configuré pour redirect les lignes vers une sortie sans correspondance et d'utiliser ensuite une destination et une command OLE DB.

Toutefois, selon la taille des sets de résultats, cela peut être lent, car le composant de search vérifiera chaque ligne une par une et si votre table de destination contient beaucoup d'loggings, cela prendra du time. En outre, selon vos parameters de cache dans le composant de search, il peut utiliser beaucoup de memory.

Il y a deux autres façons d'y parvenir:

Fusionner

En utilisant votre source de file et votre table de destination comme source, vous pouvez utiliser une jointure de fusion. La logique dans la DFT est un peu plus complexe, mais cette approche plus basée sur des sets et avec de grands sets de résultats fonctionne mieux.

Vous devrez implémenter la logique dont l'logging doit être mis à jour, inséré, supprimé ou supprimé du file à l'aide d'un composant de fractionnement conditionnel.

Je recommand fortement cette question (pas exactement votre problème, mais une bonne comparaison à mon avis): Quelles sont les différences entre les transformations Fusionner jointure et search dans SSIS?

Table de mise en scène

Une autre méthode consiste à utiliser une table temporaire pour stocker temporairement les loggings d'un file. Dans ce cas, votre DFT charge simplement les loggings d'un file dans la table de transfert, puis avec une ou plusieurs Execute SQL Task vous pouvez merge les deux sets de données. (UPDATE, INSERT, DELETE, MERGE, vous pouvez utiliser ce qui correspond à vos besoins).

Habituellement j'utilise Lookup -component avec l'option Redirect rows to no match output . Et après cela, vous pouvez utiliser deux sets de lignes nommés Lookup No Match Output et Lookup Match Output .

PS. J'ai trois articles sur SSIS, mais ils sont en russe (mais il y a beaucoup de scripts SQL et d'images). Si cela vous intéresse, vous pouvez regarder le lien suivant – https://habrahabr.ru/post/330618/