Ich habe einen Ordner namens "Data", der alle Dateien mit dem aktuellen Datum im Dateinamen enthält, wie zum Beispiel "myfile 20-08-2011". Jetzt möchte ich ein SSIS Paket erstellen, das alle Dateien sammelt, die aus dem Monat 08 stammen, dh ich möchte sortieren Dateien nach Monaten auswerten und diese Dateien in einen neuen Ordner namens "August" kopieren. Wie kann ich das tun?
Hier ist eine mögliche Lösung, um dies mit Hilfe von Foreach loop container
, Script Task
und File System Task
zu erreichen. Sie können dies ohne Dateisystemaufgabe tun. Ich habe es jedoch verwendet, um die integrierte Kontrollflussaufgabe zum Verschieben der Dateien zu verwenden. Das Beispiel wurde mit SSIS 2005
erstellt.
Im Beispiel wird davon ausgegangen, dass die Dateien einheitlich benannt werden. Daher verwendet das Beispiel das Format Datei DD-MM-YYYY . Zum Beispiel heißen die Dateien File 29-07-2011
, File 15-08-2011
etc.
Erstellen Sie im SSIS-Paket die folgenden Variablen. In diesem Beispiel werden die Quelldateien im Ordner " F:\Temp\
" gespeichert und die Dateien sollten an den Speicherort * F: \ Temp \ Monthwise * verschoben werden. Im Zielordner befinden sich Ordner für jeden Monat wie Juli, August usw.
DestinationFolder -Variable enthält den endgültigen Zielordnerwert wie F:\Temp\Monthwise\August
, aber dieser Variable wird der tatsächliche Wert innerhalb der Script-Aufgabe zugewiesen. Lassen Sie uns zunächst den Wert F:\Temp\Monthwise\
zuweisen. Dieser temporäre Wert soll verhindern, dass Dateisystem-Task zur Entwurfszeit Fehlermeldungen auslöst.
DestinationRoot enthält den eigentlichen Stammordner, unter dem die Ordner Juli und August basierend auf den Monatsnamen erstellt werden sollen.
Quellordner bezeichnet den Ordner, in dem alle Dateien zu Beginn gespeichert sind. In diesem Beispiel ist der Quellordner F:\Temp\
SourceFilePath bezeichnet den tatsächlichen Dateipfad. Diese Variable wird den einzelnen Dateiwerten zugewiesen, wenn der Foreach-Schleifencontainer jede Variable durchläuft. Um zu vermeiden, dass der Dateisystem-Task zur Entwurfszeit Fehlermeldungen ausgibt, weisen wir ihm einen Dummy-Wert F:\Temp.txt
zu.
FilePattern definiert das Dateimuster, das im angegebenen Quellordnerpfad durchlaufen werden soll. Lassen Sie uns *.*
zuweisen, was bedeutet, dass alle Dateien durchlaufen werden. Sie können auch *.txt
oder File*.txt
oder My*.xls
usw. angeben. Es entspricht Ihren Anforderungen.
MonthStartPosition bezeichnet die Position, an der der Monatswert im Dateinamen beginnt. Im Format des Dateinamens File 29-07-2011
beginnt der Monat 07 also mit dem 9. Zeichen. Daher der Wert 9.
MonthLength gibt die Anzahl der zu extrahierenden Zeichen an. Das sind sowieso 2 Zeichen, aber ich wollte nicht hart programmieren. Also habe ich eine Variable erstellt.
MonthNameFormat gibt an, wie die Ordner erstellt werden sollen. Der Wert MMMM gibt an, dass die Ordner mit vollen Monatsnamen wie Januar, Februar usw. erstellt werden. Wenn wir den Wert MMM verwenden, werden die Ordner als Jan, Feb usw. erstellt. Die Ordner werden nur erstellt, wenn sie nicht existieren.
Setzen Sie auf der Registerkarte Kontrollfluss des SSIS-Pakets ein Foreach loop container
und konfigurieren Sie es so, dass es den in der Variablen SourceFolder
angegebenen Ordner mit der Dateimustervariable FilePattern
durchläuft. Wenn der Foreach-Schleifencontainer die Dateien durchläuft, werden die Dateinamen der Variablen SourceFilePath zugewiesen. Wir werden diese Variable verwenden, um den Monatswert in der Skriptaufgabe abzurufen.
Platzieren Sie innerhalb des Foreach-Schleifencontainers Script Task
und klicken Sie im Skriptbereich der Skriptaufgabe auf die Schaltfläche Designskript ..., um den VSTA-Editor zu öffnen und den nach diesen Screenshots bereitgestellten Code einzufügen. Da das Beispiel in VS 2005 erstellt wurde, wird der Code in VB.NET geschrieben, da dies die einzige unterstützte Sprache in SSIS 2005
ist.
Skript-Aufgabencode: Der Code ruft den vollständigen Dateipfadwert aus der Variablen SourceFilePath
ab und extrahiert nur den Dateinamen, um ihn in der lokalen Variablen FileName
zu speichern.
Dann wird überprüft, ob den Variablen MonthStartPosition
und MonthLength
richtige Nicht-Null-Werte zugewiesen sind. Anschließend extrahiert es den Monatswert, um ihn in der lokalen Variablen MonthValue
zu speichern.
Nimmt MonthValue
auf, ruft den vollständigen Monatsnamenwert mit der DateTime-Funktion ab. Die Werte 1 werden Tag und Jahr zugewiesen, weil wir nur den Monatsnamen möchten.
Der Monatsname in der lokalen Variablen Ordnername wird mit dem Wert DestinationRoot kombiniert, um zu prüfen, ob der Ordner vorhanden ist oder nicht. Wenn der Ordner nicht vorhanden ist, wird der Ordner erstellt, sodass die Dateisystemaufgabe nicht fehlschlägt.
Schließlich wird der vollständige Zielordnerwert der Paketvariablen DestinationFolder
zugewiesen. Diese Variable wird in der Dateisystemaufgabe verwendet.
VB.NET code for SSIS 2005
C# code for SSIS 2008 and above
Platzieren Sie innerhalb des Foreach-Schleifencontainers Dateisystemaufgabe nach der Skriptaufgabe. Konfigurieren Sie den Dateisystem-Task wie im Screenshot gezeigt.
Sobald die Paketaufgaben konfiguriert sind, sollte die Registerkarte "Kontrollfluss" wie folgt aussehen:
Lass uns das Paket testen. Zuvor wird der Inhalt des Quellordners F: \ Temp unten angezeigt. Die Dateien sind dumm. Daher die Größe 0 KB.
Der folgende Screenshot zeigt die erfolgreiche Ausführung des Pakets.
Die folgenden Screenshots zeigen, wie die Dateien in den jeweiligen Zielordner verschoben wurden, die basierend auf den Monatsnamen erstellt wurden. Der Inhalt der einzelnen Ordner wird unten angezeigt.
Ich hoffe, das hilft.
Tags und Links ssis