SSIS - 获取列表文件名并存储到变量对象中

SSIS - Get list file names and store into variable object

您好,我将 csv 文件放在一个位置,我正在使用一个具有 forearch 循环容器的包,让我放入 foreach 文件枚举器,并检查名称和扩展名,然后我转到变量映射并将我的文件名变量放入.然后我有一个文件名列表变量作为对象数据类型,我可以使用什么工具来用每个文件名填充我的文件名列表(对象)?

路径

users/abc.csv users/azd.csv

将文件名放入单个变量中 abc.csv、azd.csv、...

此致

这不是 Foreach 文件枚举器的工作方式

Then I have a filenamelist variable as object datatype, what tool I can use to fill my filenamelist (object) with each filename?

在 Foreach 枚举器的“变量映射”选项卡中,您提供一个变量来保存枚举器的 当前 值。

在您的示例中,用户文件夹中有两个文件:abc.csv 和 azd.csv

ForEach(文件)枚举器可以智能地询问操作系统哪些文件与源文件夹(用户)中的给定文件掩码 (*.csv) 匹配。该完整列表对您不可用,因为假设您需要按顺序对每个项目执行任务。

您可能需要一个名为 CurrentFileName 的 String 类型的 SSIS 变量,然后您可以在有 filenamelist

的地方使用它

第一次迭代,CurrentFileName 的值将是 users/abc.csv,然后您可以将任务添加到容器中,例如加载数据的数据流任务,然后文件系统任务的后续任务将文件存档到不同的文件夹。

下一次迭代,CurrentFileName 的值变为 azd.csv 并且将应用所有相同的任务,但使用新值。

一个常见的失误是将 CurrentFileName 的值连接到适当的连接管理器,以便 source/target 文件在数据流中发生变化。

不,我真的想要一个列表

如果您确实需要存储值列表,那么object 的数据类型是正确的。然后您正在寻找的是编写您自己的脚本任务(C# 或 VB.NET)来生成文件列表并将其分配给变量的值。假设您选择 User::filenamelist 作为 read/write 变量,该代码大约是

// 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 中的 object 数据类型做太多事情。但是,您可以将该变量用作 Foreach 枚举器的源,但这一次,您需要将其更改为...而不是文件,标题中带有 Variable 的东西,也许是 Variable Enumerator?