Cabaran: Mengimport berbilang fail teks dengan nama dan skema yang sama ke dalam jadual pangkalan data tunggal boleh menjadi halangan apabila fail berada dalam keadaan berasingan direktori.
Penyelesaian: Dalam SQL Server Integration Services (SSIS), anda boleh menggunakan Foreach File Container untuk menangani cabaran ini dengan mudah.
Foreach File Container :
Bekas ini berulang melalui koleksi fail, menggunakan set tugasan tertentu kepada setiap satu. Dengan mendayakan pilihan "Subfolder Traverse" dalam bekas, SSIS akan turun secara rekursif ke dalam subdirektori, memproses semua fail yang sepadan dengan topeng fail yang ditentukan.
Menggunakan Ungkapan:
Untuk mengubah suai sifat ConnectionString secara dinamik Pengurus Sambungan Fail Rata semasa pelaksanaan, gunakan ungkapan. Berikan nilai nama fail semasa kepada ungkapan ConnectionString. Ini menjamin bahawa sumber fail berubah apabila bekas berpusing melalui fail.
Tugasan Pembolehubah:
Buat pembolehubah untuk mewakili fail semasa dalam Bekas Fail Foreach. Ini membenarkan tugasan berikutnya untuk mengakses laluan fail dan melaksanakan operasi yang diperlukan berdasarkan fail semasa yang sedang diproses.
Tugas Aliran Data:
Di dalam setiap lelaran bekas, sertakan tugas Aliran Data untuk memproses data yang diimport. Tugas ini terdiri daripada Sumber Fail Rata, yang membaca fail, transformasi Kiraan Baris untuk mengira bilangan baris input dan Destinasi OLE DB, yang memuatkan data ke dalam jadual sasaran.
Contoh Kod:
Di bawah ialah contoh kod yang lebih terperinci untuk melaksanakan penyelesaian:
<!-- 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(); } } }
Kod C# di atas menunjukkan pendekatan alternatif menggunakan keupayaan peringkat sistem untuk mendapatkan semula semua fail dengan sambungan yang ditentukan secara rekursif daripada direktori data sumber dan memasukkannya ke dalam jadual pangkalan data sasaran.
Atas ialah kandungan terperinci Bagaimanakah SSIS boleh mengimport berbilang fail teks dengan nama dan skema yang sama dengan cekap daripada subfolder berbeza ke dalam satu jadual pangkalan data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!