Herausforderung:Importieren mehrerer Textdateien mit identischen Namen und Schemata in Eine einzelne Datenbanktabelle kann eine Hürde darstellen, wenn sich die Dateien in separaten Datenbanken befinden Verzeichnisse.
Lösung: In SQL Server Integration Services (SSIS) können Sie den Foreach-Dateicontainer verwenden, um diese Herausforderung mühelos zu bewältigen.
Foreach-Dateicontainer :
Dieser Container durchläuft eine Sammlung von Dateien und wendet auf jede einzelne einen bestimmten Satz von Aufgaben an. Durch Aktivieren der Option „Unterordner durchsuchen“ im Container wird SSIS rekursiv in Unterverzeichnisse absteigen und alle Dateien verarbeiten, die der angegebenen Dateimaske entsprechen.
Ausdrücke anwenden:
Um die ConnectionString-Eigenschaft des Flat File Connection Managers während der Ausführung dynamisch zu ändern, nutzen Sie Ausdrücke. Weisen Sie dem ConnectionString-Ausdruck den Wert des aktuellen Dateinamens zu. Dies garantiert, dass sich die Dateiquelle ändert, während der Container die Dateien durchläuft.
Variablenzuweisung:
Erstellen Sie eine Variable, um die aktuelle Datei im Foreach-Dateicontainer darzustellen. Dadurch können nachfolgende Aufgaben auf den Pfad der Datei zugreifen und notwendige Vorgänge basierend auf der aktuell verarbeiteten Datei ausführen.
Datenflussaufgaben:
In jeder Iteration des Containers Fügen Sie eine Datenflussaufgabe hinzu, um die importierten Daten zu verarbeiten. Diese Aufgabe besteht aus einer Flatfile-Quelle, die die Datei liest, einer Zeilenanzahltransformation zum Zählen der Anzahl der Eingabezeilen und einem OLE DB-Ziel, das die Daten in die Zieltabelle lädt.
Beispielcode:
Unten finden Sie ein detaillierteres Codebeispiel zur Implementierung der Lösung:
<!-- C# code using System.IO to demonstrate a different approach --> // Import System.IO for file I/O operations using System.IO; // Get the current directory string currentDirectory = Directory.GetCurrentDirectory(); // Define the source data directory string sourceDirectory = Path.Combine(currentDirectory, "SSISDATA\SO\TEST"); // Get all files with the specified extension var files = Directory.GetFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories); // Iterate through each file foreach (string file in files) { // Get the file name without the extension string fileName = Path.GetFileNameWithoutExtension(file); // Load the data from the file into a data table DataTable data = GetDataFromFile(file); // Insert the data into the target table using (var connection = new SqlConnection("connection string")) { using (var command = new SqlCommand("INSERT INTO TargetTable (File, Data) VALUES (@File, @Data)", connection)) { command.Parameters.AddWithValue("@File", fileName); command.Parameters.AddWithValue("@Data", data); connection.Open(); command.ExecuteNonQuery(); } } }
Der obige C#-Code demonstriert Ein alternativer Ansatz, der Funktionen auf Systemebene nutzt, um alle Dateien mit der angegebenen Erweiterung rekursiv aus dem Quelldatenverzeichnis abzurufen und in die Zieldatenbanktabelle einzufügen.
Das obige ist der detaillierte Inhalt vonWie kann SSIS mehrere Textdateien mit demselben Namen und Schema aus verschiedenen Unterordnern effizient in eine einzige Datenbanktabelle importieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!