Prüfen, ob Datei vorhanden im Ordner oder nicht (SSIS, SDT 2015 und SQL-2016)
Muss ich laden mehrere Dateien in eine SQL-Tabelle. Ich habe drei verschiedene Formate, CSV -, XLSX-und XLS -, aber ich werde laden Sie eine Typ von Dateien zu einem Zeitpunkt, keine Kombination von verschiedenen Datei-Typen.
Zuerst, ich werde prüfen, in meinem source Ordner, wenn die Datei vorhanden ist oder nicht. Wenn es vorhanden ist, laden Sie es zu Tisch und weiter zur nächsten Datei. Die Datei-überprüfung und Auswahl-Prozess muss dynamisch sein. Ich will nicht zu hart code den Namen der Datei in eine variable. Wenn das Paket gestartet wird, muss ich die filename-variable zum speichern der ersten Datei vorhanden ist in dem Ordner jedes mal, wenn ich das Paket ausführen.
Wenn die Datei nicht gefunden in dem Ordner, E-mail senden Warnung, dass die Datei nicht vorhanden ist.
Zum Beispiel, wenn ich die drei Dateien in meinem Ordner,
File1.csv
File2.csv
File3.csv
Ich mein Paket und ich codieren Sie den Namen der Datei variable = File1.csv
im ersten Lauf. Mein Paket wird erfolgreich ausgeführt und lädt die Datei1 an den Tisch und archiviert Sie in den Archiv-Ordner.
Beim nächsten mal für jede Schleife läuft, sieht es für variable filename = Datei1, aber es ist bereits archiviert, so dass mein Paket nicht in der Lage, Datei2 aus dem Ordner. Wie kann ich das richtig machen kann?
- stackoverflow-Dokumentation link Laden Sie mehrere CSV-Dateien gleichen formats aus einem Ordner
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst einen Skripttask verwenden, um zu überprüfen, ob eine Datei vorhanden ist in dem Ordner oder nicht.Erstellen eine integer-variable und setzen Sie ihn auf 1, wenn die Datei gefunden wird, und auf 0, wenn Datei nicht gefunden. Verwenden von expression und Einschränkung in der rangfolgeneinschränkung.
http://www.techbrothersit.com/2013/07/ssis-how-to-check-if-file-exists-in.html
Wenn die Auswertung von expression false ist,schließen Sie es an eine E-mail-Aufgabe,sonst
herstellen einer for each-Schleife Aufgabe.
Bitte:https://www.simple-talk.com/sql/ssis/ssis-basics-introducing-the-foreach-loop-container/ oder mehr details.
Einen trick im SSIS-erstellen einer Foreach-Schleife.
Erstellen Sie eine weitere variable zum speichern der aktuellen Datei gefunden, auf die Foreach-Schleife, Beispiel: User:: mit dem Namen
Fügen der Foreach-Schleife aus der SSIS-Toolbox.
Auf die Foreach-Schleife editor bei Abholung linken tab wählen Sie im Enumerator - Foreach File Enumerator
Klicken Sie auf Ausdrücke und fügen Sie eine Eigenschaft für Ordner und wählen Sie in der expression der @[User::filepath]
Geben Sie auf den Ordner, den Wert der Pfad-variable (wird überschrieben, bei der Ausführung aus den obigen Ausdruck, das ist, wenn Sie Dateipfad zur Laufzeit geändert wird)
Auf Datei-geben Sie so etwas wie . oder *.txt oder was auch immer filter, die Sie anwenden möchten, um den Ordner.
Auf die Variable Mappings linken tab wählen Sie in der Spalte "Variable" Benutzer::variable mit dem Namen der Index-Spalte wird standardmäßig auf 0.
Dann stellen Sie Ihre Logik in der Foreach-Schleife-box.
Diese wird nur ausgeführt, Ihre Logik, wenn eine Datei gefunden wird. Sie können auch verwenden Sie diese, um mehrere Dateien verarbeiten, wenn Sie vorhanden sind für den Ordner.
Hoffe, das hilft.