2017-09-15 7 views
0

J'ai un package SSIS qui parcourt un emplacement de fichier en important les données de plusieurs fichiers plats vers une destination de table SQL Server. Certaines lignes de données dans le fichier ne peuvent pas être traitées, donc celles qui échouent, j'ai envoyé à une destination de fichier plat séparé.Suppression du contenu d'un fichier texte avant l'importation dans SSIS

Mon problème est que si je coche la case Overwrite data in the file, je ne reçois que 3 lignes de données sur des milliers. Si je décoche la case, alors j'obtiens une image plus vraie avec plus d'une centaine d'enregistrements qui ne peuvent pas être traités pour une raison ou une autre. Je ne peux pas le laisser comme ceci car chaque fois que le paquet est exécuté, le contenu de la dernière exécution est toujours présent.

Ma question est la suivante: pourquoi cela se produit-il et comment puis-je le résoudre? Le Data Flow Task se trouve dans un conteneur For Each Loop, je soupçonnais donc que chaque fois que la boucle est exécutée, il écrase toutes les données envoyées au fichier plat des lignes ayant échoué. Cependant, les données présentes à la fin de la boucle proviennent du premier fichier obtenu par la boucle. Est-ce que je peux écrire un code SQL pour éviter que cela se produise?

Répondre

1

À chaque exécution, avant la boucle for, supprimez le fichier s'il existe et créez-en un nouveau, puis ne le remplacez pas.

Si vous souhaitez conserver l'historique des exécutions précédentes, vous pouvez suffixer le fichier avec un ID d'exécution ou une valeur datetime. Si vous faites cela, vous pouvez également effectuer un nettoyage pour ne conserver que certains fichiers soit un nombre spécifique ou dans une plage de dates.

+0

Merci Jayvee, fonctionne très bien. Je suis nouveau à SSIS donc toujours trouver mon chemin autour de la gamme d'options sur la boîte à outils! – SSingh

+1

Veuillez cliquer sur la coche à côté de cette réponse pour fermer la question. –