Défi : Importation de plusieurs fichiers texte avec des noms et des schémas identiques dans une seule table de base de données peut constituer un obstacle lorsque les fichiers résident dans des emplacements distincts. répertoires.
Solution : Dans SQL Server Integration Services (SSIS), vous pouvez utiliser le conteneur de fichiers Foreach pour relever ce défi sans effort.
Conteneur de fichiers Foreach :
Ce conteneur parcourt une collection de fichiers, appliquant un ensemble spécifié de tâches à chacun. En activant l'option « Traverser le sous-dossier » dans le conteneur, SSIS descendra de manière récursive dans les sous-répertoires, traitant tous les fichiers qui correspondent au masque de fichier spécifié.
Application d'expressions :
Pour modifier dynamiquement la propriété ConnectionString du gestionnaire de connexions de fichiers plats pendant l'exécution, exploitez les expressions. Attribuez la valeur du nom de fichier actuel à l'expression ConnectionString. Cela garantit que la source du fichier change à mesure que le conteneur parcourt les fichiers.
Affectation de variable :
Créez une variable pour représenter le fichier actuel dans le conteneur de fichiers Foreach. Cela permet aux tâches suivantes d'accéder au chemin du fichier et d'exécuter les opérations nécessaires en fonction du fichier en cours de traitement.
Tâches de flux de données :
À l'intérieur de chaque itération du conteneur, inclure une tâche Data Flow pour traiter les données importées. Cette tâche consiste en une source de fichier plat, qui lit le fichier, une transformation Row Count pour compter le nombre de lignes d'entrée et une destination OLE DB, qui charge les données dans la table cible.
Exemple de code :
Vous trouverez ci-dessous un exemple de code plus détaillé pour implémenter la solution :
<!-- 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(); } } }
Le code C# ci-dessus démontre une approche alternative utilisant des capacités au niveau du système pour récupérer de manière récursive tous les fichiers avec l'extension spécifiée à partir du répertoire de données source et les insérer dans la table de la base de données cible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!