2010-03-22 10 views
2

Dans mon travail SSIS, j'ai besoin d'accumuler un ensemble de lignes et de les valider toutes de manière transitoire lorsque le traitement s'est terminé avec succès. Si c'était du SQL pur, j'utiliserais une table temporaire dans une transaction. Dans SSIS, il y a un certain nombre de problèmes qui compliquent cela. Il est difficile d'avoir plusieurs composants partageant la même transaction et avoir des tables temporaires qui n'existent pas au moment de la conception est pénible. Si j'utilise des jeux d'enregistrements dans SSIS à cette fin, il existe d'autres problèmes. Ma compréhension est qu'un composant 'Execute SQL' réinitialisera le Recordset lorsqu'il sera exécuté, donc je ne peux pas l'utiliser pour ajouter une ligne supplémentaire. Est-il possible de créer une connexion OLE DB qui fait référence à un jeu d'enregistrements en mémoire?Manipulation de jeu d'enregistrements dans SSIS

Y a-t-il un meilleur moyen d'atteindre ce résultat?

Répondre

2

Il existe un meilleur moyen. Je suggère d'utiliser une table temporaire, comme vous avez dit que vous aviez essayé/considéré. Les clés permettant d'utiliser une table temporaire avec SSIS sont les suivantes: 1. Vous devez définir la propriété "conserver la même connexion" sur true sur le gestionnaire de connexion, sinon la gestion et le regroupement de connexions "intelligentes" finissent par supprimer votre connexion (et restaurer sans la table temporaire) à mi-chemin de votre colis. 2. Vous devez concevoir votre paquet avec la table temporaire créée déjà - même si vous devez le créer comme une table normale afin de concevoir contre. Lorsque vous êtes prêt à déployer, modifiez le nom de la table dans les composants qui le touchent et définissez la propriété DelayValidation de tâches sur False. (Cela empêchera le paquet d'échouer car la table n'existe pas au démarrage initial du package.)