Comment puis-je déplacer des fichiers vers un dossier d'archivage une fois que les fichiers ont été traités?
Je suis en train d'archiver un ensemble de fichiers à partir de la source chemin d'accès à un chemin de l'archive une fois que j'ai terminé de faire certains Tâche de Flux de Données articles.
À l'intérieur d'une Boucle Foreach Conteneur j'ai:
La Tâche de Script -> Tâche de Flux de Données -> Execute Tâche SQL -> Système de Fichiers Tâche
J'ai une variable Utilisateur "Nom et l'extension" élément dans la Collection de paramètres de la Boucle Foreach Conteneur. La variable est appelée "nom de fichier" et est utilisé à la fois la Tâche de Script (utilisée pour analyser des infos à partir d'un fichier et d'effectuer la Tâche d'Exécution SQL) ainsi que dans la Tâche de Flux de Données dans le Plat Gestionnaire de connexions de Fichiers qui est utilisé par la Source de Fichier Plat élément. J'ai ensuite analyser le fichier et insérer les données dans une base de données. Tout fonctionne comme il se doit jusqu'à ce que j'arrive à la Tâche de Système de Fichiers (FST).
Ce que je voudrais, c'est avoir le fichier déplacé vers un dossier d'archivage une fois son insertion est terminée.
À l'aide de plusieurs liens en ligne (ici, ici et ici) j'ai ajouté les différentes variables qui sont soit codé en dur ou dérivé de massage d'autres variables.
En tout cas ce qui se passe, c'est que le FST j'ai des erreurs comme "caractères non valides dans la voie" ou "chemin inconnu'.
Si j'essaie de masser les exemples ci-dessus pour l'adapter à mon système de structure de maintenant, je reçois une erreur sur la Source de Fichier Plat pas dans la Tâche de Flux de Données en précisant qu'il ne peut pas trouver le fichier spécifié. Cela est dû parce qu'il
a) ne peut pas trouver le chemin d'accès au fichier car aucun chemin d'accès au fichier, c'est de donner, juste le filname.ext
b) ne peut pas analyser la variable qui contient le chemin complet du fichier source (@FullSourcePathFileName
qui a sa valeur @[User::SourcePath]
+ @[User::fileName]
)
J'ai testé d'autres modifications diverses, y compris faire exactement ce qui est dans le premier exemple que j'ai posté (cependant que l'on ne font rien de la Tâche de Flux de Données donc j'ai juste ajouté une Source de Fichier Plat étape sans destination) et a reçu le même ensemble d'erreurs. Je suis à une perte, comme toutes les suggestions sur la façon de résoudre ce problème.
EDIT:
Semble qu'il met en situation d'échec sur le FullArchivePathFileName
- il jamais évalue l'expression, même si je l'ai mis à "True". Encore confus quant à pourquoi il n'est pas l'évaluer. J'ai donc réalisé son expression la même que FullSourcePathFileName
et vérifié les EvaluateAsExpression indicateur est défini sur True. Il ne fait toujours pas évaluer cette variable.Le FullSourcePathFileName
variable est en train d'être évaluées de la même amende.
OriginalL'auteur wergeld | 2011-07-14
Vous devez vous connecter pour publier un commentaire.
Exemple suivant créé en
SSIS 2005
lit les fichiers CSV à partir d'un dossier donné et insère des données dans une table SQL. Après l'importation de données dans SQL, les fichiers sont déplacés vers un dossier d'Archivage à l'aide du Système de Fichiers de la Tâche.Étape-par-étape du processus:
Créer un dossier portant le nom de l'Archive à l'intérieur de chemin C:\temp. Créer deux fichiers CSV nommé File_1.csv et File_2.csv et de les remplir avec des données. Laisser le dossier d'Archive vide. Consultez les captures d'écran #1 - #4.
Sur le package SSIS créer des 5 variables, comme indiqué dans la capture d'écran #5. Définissez la variable RootFolder avec la valeur
C:\temp\
. Définissez la variable FilePattern avec la valeur*.csv
.Sélectionnez la variable FilePath et appuyez sur F4 pour ouvrir les propriétés, modifiez la propriété EvaluateAsExpression à
True
et définissez la propriété d'Expression avec la valeur@[User::RootFolder] + @[User::FileName]
comme indiqué dans la capture d'écran #6.Sélectionnez la variable ArchiveFolder et appuyez sur F4 pour ouvrir les propriétés, modifiez la propriété EvaluateAsExpression à
True
et définissez la propriété d'Expression avec la valeur@[User::RootFolder] + "Archive\\"
comme indiqué dans la capture d'écran #7.Sur le package SSIS du gestionnaire de connexion, créez un Nouveau Fichier Plat, Connexion nommée CSV. Consultez la capture d'écran #8. Configurer les connexions de fichiers plats, comme indiqué dans les captures d'écran #9 - #13. Aussi, créer une connexion OLE DB nommé SQLServer pour se connecter à la base de données SQL Server. Une fois les connexions sont créées, il devrait ressembler comme indiqué dans la capture d'écran #14.
Droit-cliquez sur connexions de fichiers plats CSV et sélectionnez propriétés et configurer la ConnectionString Expression avec la valeur @[Utilisateur::FilePath] à l'aide du bouton de points de suspension, comme indiqué dans les captures d'écran #15 - #16.
Créer une table nommée
dbo.Items
dans le SQL Server en utilisant les scripts fournis en vertu de Scripts SQL section. Les fichiers CSV les données seront insérées dans ce tableau.Sur l'onglet flux de Contrôle, placez un
Foreach Loop container
,Data Flow Task
etFile System Task
comme indiqué dans la capture d'écran #17.Configurer le conteneur de Boucle Foreach, comme indiqué dans les captures d'écran #18 - #19.
À l'intérieur de la Tâche de Flux de Données, placez une Source de Fichier Plat, Colonne Dérivée de la transformation et une Destination OLE DB, comme indiqué dans la capture d'écran #20.
Configurer la Source de Fichier Plat comme indiqué dans les captures d'écran #21 et #22. Cela permettra de lire les données à partir de fichiers CSV.
Configurer la Colonne Dérivée de la transformation, comme indiqué dans la capture d'écran #23. Ce est utilisé pour créer le Chemin d'accès du fichier valeur de la colonne à l'aide de la variable de même nom.
Configurer la Destination OLE DB, comme indiqué dans les captures d'écran #24 et @25. Cela permettra d'insérer les données dans la table SQL.
Sur l'onglet Flux de Contrôle, configurer la Tâche de Système de Fichiers comme indiqué dans la capture d'écran #26. Veuillez noter que, bien que Déplacer le fichier opération, le
DestinationVariable
peut être spécifié comme un répertoire et il ne peut pas être spécifié en tant que Chemin de fichier complet. Si vous spécifiez le chemin d'accès au fichier, vous obtiendrez le message d'erreur[File System Task] Error: An error occurred with the following error message: "Could not find a part of the path.".
Capture d'écran #28 montre qu'il n'existe pas de données dans la table avant l'exécution du package.
Captures d'écran #29 et #30 forfait spectacle des exécutions à l'intérieur du Flux de Contrôle et les Flux de Données des onglets.
Captures d'écran #31 et #32 montrent que les fichiers ont été déplacés dans le dossier d'Archive.
Capture d'écran #33 affiche les données dans la table après l'exécution du package.
Sur le Système de Fichiers de la Tâche, la propriété
OverwriteDestination
a été mis à Faux (c'est la valeur par défaut). Si vous déplacez des fichiers de même nom dans le dossier d'Archive, vous obtiendrez l'erreur[File System Task] Error: An error occurred with the following error message: "Cannot create a file when that file already exists. ".
montré dans la capture d'écran #34. Pour éviter cela, réglez le OverwriteDestination True ou l'autre option consiste à renommer les fichiers et les copier dans le dossier des Archives et de les supprimer.Espère que ça aide.
Scripts SQL:
Capture d'écran #1:
Capture d'écran #2:
Capture d'écran #3:
Capture d'écran #4:
Capture d'écran #5:
Capture d'écran #6:
Capture d'écran #7:
Capture d'écran n ° 8:
Capture d'écran n ° 9:
Capture d'écran n ° 10:
Capture d'écran #11:
Capture d'écran n ° 12:
Capture d'écran n ° 13:
Capture d'écran #14:
Capture d'écran n ° 15:
Capture d'écran #16:
Capture d'écran #17:
Capture d'écran #18:
Capture d'écran #19:
Capture d'écran #20:
Capture d'écran #21:
Capture d'écran n ° 22:
Capture d'écran #23:
Capture d'écran #24:
Capture d'écran #25:
Capture d'écran #26:
Capture d'écran #27:
Capture d'écran n ° 28:
Capture d'écran n ° 29:
Capture d'écran, #30:
Capture d'écran #31:
Capture d'écran n ° 32:
Capture d'écran #33:
Capture d'écran #34:
ding! Il y avait un funky de caractères ASCII dans l'expression. Maintenant, il analyse le! Merci beaucoup pour votre querelles de.
Ce sera un monde meilleur avec de telles réponses! +1 mate
fantastique, vous explique à merveille.
ne fonctionne pas pour moi, mais il m'a aidé à accomplir mon objectif. tahnks
OriginalL'auteur