2017-10-20 7 views
0

image le scénario suivant: 1. il y a nombre d'emplois N 2. les emplois écrivent des données dans le même fichier une fois par jour de manière séquentielle 3. Le réglage de la tâche indique si le fichier doit être remplacé ou ajouté àSQL Server 2016 SSIS conditionnellement Ecraser fichier texte

ce que j'ai essayé jusqu'ici utilise un conditional split dans mon data flow:

conditional split

pour le tester, le cas 1 & 2 sont:

enter image description here

ce qui se passe en réalité est, de fractionnement conditionnel essaie de déterminer les lignes de données à envoyer où, finit par envoyer toutes les lignes d'un côté et 0 lignes à l'autre et les deux parties finissent par ouvrir le fichier (je crois), d'où les erreurs:

enter image description here

je reçois que je suis abusant de la conditional split ici, mais venez un, il est 2017 à l'extérieur, l'doit être un moyen de le faire sans avoir recours à Script tâches effacer les fichiers?

Répondre

1

Votre problème - vous utilisez abusivement Conditionnel Divisé; il est conçu pour manipuler les lignes de données dans un flux de données et vous essayez de gérer le flux de contrôle. En parlant de SSIS, il ne sait pas à l'avance que vous utiliserez seulement l'un des Destinations de fichier plat; il essaie d'initialiser les deux. Ce faisant, SSIS tente d'ouvrir le même fichier à partir de deux destinations et échoue avec une erreur.
Vous pouvez gérer la tâche de façon SSIS - gérer le flux de contrôle avec des tâches. Dans votre cas, le fichier de destination doit être ajouté ou remplacé. Mais l'être écrasé peut être considéré comme étant écrasé par zéro lignes et ensuite être ajouté. Heureusement pour vous, SSIS écrase un événement de fichier, aucun enregistrement ne provient d'un flux de données. Ainsi, avant votre flux de données qui doit toujours ajouter des données, vous créez un autre flux de données qui reçoit toujours ZERO lignes de données (les colonnes de l'ensemble peuvent être arbitraires) et Flat File Destination écrasant le fichier. Utilisez ensuite l'exécution conditionnelle du flux de contrôle avec des contraintes de précédence pour exécuter cette "tâche de nettoyage de fichier". Vous devrez peut-être également définir DelayValidation=true dans cette "Tâche de nettoyage de fichier".

+0

Merci pour votre réponse. J'ai déplacé la logique dans le flux de contrôle avec une tâche "Supprimer le fichier" paramétrée. – Tsar