課題: 同じ名前とスキーマを持つ複数のテキスト ファイルをファイルが別々に存在する場合、単一のデータベース テーブルが障害になる可能性があります。
解決策: SQL Server Integration Services (SSIS) では、Foreach ファイル コンテナーを使用して、この課題に簡単に取り組むことができます。
Foreach ファイル コンテナー:
このコンテナは、ファイルのコレクションを反復処理し、指定されたセットを適用します。それぞれに課題を与えます。コンテナー内で [サブフォルダーのトラバース] オプションを有効にすると、SSIS は再帰的にサブディレクトリに下り、指定されたファイル マスクに一致するすべてのファイルを処理します。
式の適用:
実行中にフラット ファイル接続マネージャーの ConnectionString プロパティを動的に変更するには、式を利用します。現在のファイル名の値を ConnectionString 式に割り当てます。これにより、コンテナーがファイルをループするときにファイル ソースが変更されることが保証されます。
変数の割り当て:
Foreach ファイル コンテナー内に現在のファイルを表す変数を作成します。これにより、後続のタスクがファイルのパスにアクセスし、処理中の現在のファイルに基づいて必要な操作を実行できるようになります。
データ フロー タスク:
コンテナーの各反復内で、インポートされたデータを処理するデータ フロー タスクを含めます。このタスクは、ファイルを読み取るフラット ファイル ソース、入力行数をカウントする行数変換、およびデータをターゲット テーブルにロードする OLE DB 宛先で構成されます。
コード例:
以下は、解決策:
<!-- 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(); } } }
上記の C# コードは、システム レベルの機能を使用して、指定された拡張子を持つすべてのファイルをソース データ ディレクトリから再帰的に取得し、ターゲット データベース テーブルに挿入する代替アプローチを示しています。
以上がSSIS は、異なるサブフォルダーから同じ名前とスキーマを持つ複数のテキスト ファイルを 1 つのデータベース テーブルに効率的にインポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。