嗨,我將 csv 檔案放到一個位置,我正在使用一個具有 foreach 回圈容器的包,讓我放入 foreach 檔案 enumeador,并檢查名稱和擴展名,然后我轉到變數映射并放入我的檔案名變數。然后我有一個檔案名串列變數作為物件資料型別,我可以使用什么工具來用每個檔案名填充我的檔案名串列(物件)?
小路
用戶/abc.csv 用戶/azd.csv
將檔案名放入單個變數 abc.csv、azd.csv、...
問候
uj5u.com熱心網友回復:
這不是 Foreach 檔案列舉器的作業方式
然后我有一個檔案名串列變數作為物件資料型別,我可以使用什么工具來用每個檔案名填充我的檔案名串列(物件)?
在 Foreach 列舉器的變數映射選項卡中,您提供一個變數來保存列舉器的當前值。
在您的示例中,用戶檔案夾中有兩個檔案:abc.csv 和 azd.csv
ForEach(檔案)列舉器具有智能詢問作業系統哪些檔案與源檔案夾(用戶)中的給定檔案掩碼 (*.csv) 匹配。該完整串列對您不可用,因為假設您需要按順序對每個專案執行任務。
您可能需要一個名為 String 型別的 SSIS 變數,CurrentFileName
然后您將在您擁有的地方使用它filenamelist
第一次迭代時,CurrentFileName 的值將是 users/abc.csv,然后您將添加任務到容器中,例如加載資料的資料流任務,然后是檔案系統任務的后續任務,以將檔案存檔到不同的檔案夾。
下一次迭代,CurrentFileName 的值變為 azd.csv,所有相同的任務都將被應用,但具有一個新值。
一個常見的錯誤是將 CurrentFileName 的值連接到適當的連接管理器,以便源/目標檔案在資料流中發生更改。
不,我真的想要一份清單
如果您確實需要存盤值串列,那么物件的資料型別是正確的。然后您要尋找的是撰寫您自己的腳本任務(C# 或 VB.NET)來生成檔案串列并將其分配給變數的值。假設您已選擇 User::filenamelist 作為讀/寫變數,該代碼大約為
// TODO: replace users with actual path
string directoryName = @"users";
// TODO: is this a valid filter?
string fileExtension = "*.csv";
// Instantiate the directory object
System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(directoryName);
// Change the SearchOption to AllDirectories if you need to search subfolders
System.IO.FileInfo[] legacyArray = directoryInfo.GetFiles(fileExtension, System.IO.SearchOption.TopDirectoryOnly);
// Assuming all is well, assign back to the SSIS scoped variable
// This is case sensitive so be wary
// Ensure you assign to the Value property as shown
Dts.Variables["User::filenamelist"].Value = legacyArray;
任務完成,SSIS 變數檔案名串列填充了值 - 現在怎么辦?除了確保它不為空之外,您實際上無法對 SSIS 中的物件資料型別做太多事情。但是,您可以使用該變數作為 Foreach 列舉器的源,但這次,您可以將其更改為......標題中帶有變數的東西,也許是變數列舉器?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487146.html
上一篇:如何宣告變數并在后續查詢中使用它
下一篇:終端視窗和Vs代碼變數