我在 SSIS 方面遇到了一个有趣的挑战。使用 for-each 文件枚举器,我需要选择最近创建的子文件夹,然后迭代每个文件。
也许举个例子会更好地解释。这些文件夹看起来像这样:
c:\数据\2011-0703
c:\数据\2011-0626
c:\数据\2011-0619
如何获得每个文件枚举器来选择最近的文件夹?这可以通过查看创建日期或比较文件名来实现。
我猜这将通过枚举器中的表达式来完成,只是不知道如何完成!在网上也找不到任何东西。
Thanks
这是一个可能的选择,您可以在以下帮助下实现这一目标Script Task
。以下示例展示了如何做到这一点。该示例是在 SSIS 2008 R2 中创建的。
分步过程:
创建三个文件夹,名称分别为2011-0619
, 2011-0626
and 2011-0703
在文件夹路径中C:\temp\
如截图所示#1。记下Date created
每个文件夹的值。
在每个文件夹中放置一些文件,如屏幕截图所示#2 - #4.
在 SSIS 包上,创建四个变量,如屏幕截图所示#5。设置变量根文件夹有价值C:\temp\
(在您的情况下,这将是 c:\data)。设置变量文件模式有价值*.*
。多变的最近使用的文件夹将分配脚本任务中最近的文件夹路径。为了避免设计时错误,请分配变量最近使用的文件夹具有有效的文件路径。多变的FilePath当文件在最近的文件夹中循环时,将被分配值。
在 SSIS 包上,放置一个脚本任务。将脚本任务中的 Main() 方法替换为下面给出的脚本任务代码脚本任务代码(获取最近的文件夹):。此脚本获取根文件夹中的文件夹列表,并循环检查创建日期时间以选择最近创建的文件夹。然后将最近创建的文件夹路径存储在变量中最近使用的文件夹.
在 SSIS 包上,放置一个 Foreach 循环容器并按屏幕截图所示进行配置 #6 and #7.
将脚本任务放置在 Foreach 循环容器内。将脚本任务中的 Main() 方法替换为下面给出的脚本任务代码脚本任务代码(显示文件名):。该脚本仅显示最近创建的文件夹中的文件名称。
配置完所有任务后,包应如屏幕截图所示#8.
截图#9 - #11显示包显示最近创建的文件夹中的文件名2011-0703.
希望有帮助。
脚本任务代码(获取最近的文件夹):
C#代码只能在SSIS 2008 及以上版本.
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::RootFolder");
Dts.VariableDispenser.LockForWrite("User::RecentFolder");
Dts.VariableDispenser.GetVariables(ref varCollection);
string rootFolder = varCollection["User::RootFolder"].Value.ToString();
DateTime previousFolderTime = DateTime.MinValue;
string recentFolder = string.Empty;
foreach (string subFolder in System.IO.Directory.GetDirectories(rootFolder))
{
DateTime currentFolderTime = System.IO.Directory.GetCreationTime(subFolder);
if (previousFolderTime == DateTime.MinValue || previousFolderTime <= currentFolderTime)
{
previousFolderTime = currentFolderTime;
recentFolder = subFolder;
}
}
varCollection["User::RecentFolder"].Value = recentFolder;
Dts.TaskResult = (int)ScriptResults.Success;
}
脚本任务代码(显示文件名):
C#代码只能在SSIS 2008 及以上版本.
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::FilePath");
Dts.VariableDispenser.GetVariables(ref varCollection);
MessageBox.Show(varCollection["User::FilePath"].Value.ToString(), "File Path");
Dts.TaskResult = (int)ScriptResults.Success;
}
屏幕截图#1:
屏幕截图#2:
屏幕截图#3:
屏幕截图#4:
屏幕截图#5:
屏幕截图#6:
屏幕截图#7:
屏幕截图#8:
屏幕截图#9:
屏幕截图#10:
屏幕截图#11:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)