Est-ce que je perds mes tables temporaires lors du changement de tâches dans un packageage SSIS?

J'écris un package SSIS qui importe des données à partir d'une database Oracle. Il y a des chances que certaines lignes soient déjà dans la table de destination, et vu qu'il n'y a aucune tâche dans SSIS 2008 qui me permet de vérifier ceci, mon idée est de créer une table temporaire et d'utiliser un champ dans la table de destination pour filterr les lignes de la table temporaire que je peux réellement insert.

Je comprends que les tables temporaires locales et globales disparaissent lorsqu'elles sortent du cadre . Donc, ma question est, quand mon package SSIS passe à la tâche suivante, mes tables temporaires vont-elles disparaître?

Dans votre (vos) gestionnaire (s) de connection, vous devez définir RetainSameConnection = True. Cela garantit que votre connection ne se ferme pas pendant l'exécution du package – en utilisant le même SPID.

Vous aurez également besoin de définir DelayValidation = True pour la plupart de vos tâches (sans voir votre package, je ne peux pas vous dire tous, mais vous pouvez expérimenter). Par défaut, SSIS tente de pré-valider toutes les étapes de votre package avant l'exécution. Lorsque vous utilisez des tables temporaires, si la table temporaire n'existe pas, cette pré-validation échouera. En définissant DelayValidation = True, vous évitez la pré-validation.

Enfin, vous devrez peut-être faire quelques trucs bizarres pour que le package reconnaisse votre table temporaire au moment de la design – ex. Exécutez la tâche qui crée votre table temporaire, puis essayez de mapper vos champs (en supposant que vous suiviez les bonnes pratiques et déposez la table temporaire à la fin de votre colis).

Cet article fournit un bon aperçu: http://www.mssqltips.com/sqlservertip/2826/how-to-create-and-use-temp-tables-in-ssis/

Vous devriez être capable d'accomplir ceci avec des tables temporaires globales ou locales.

Ce dont vous avez besoin est de 2 sources oledb dans le package. Un pour la table d'oracle et un pour la table de destination. Ensuite, vous faites un sorting sur chacun et ajoutez une jointure de fusion sur les keys des 2 sources. Dans la jointure de fusion, vous faites une jointure externe gauche, puis ajoutez une scission conditionnelle. La division conditionnelle aura "Existant" et "Nouveau"

La condition existante sera! IsNull (DestTableID). La nouvelle condition sera IsNull (DestTableID).

À partir du fractionnement conditionnel, vous disposez d'une command oledb sql qui mettra à jour la table de destination si la condition est Existante.

À partir du partage conditionnel, vous avez une destination oledb, qui sera la table de destination et appenda de nouvelles lignes si la condition est New.