我在此路径C:\Customer\
中有文件夹
文件夹名称:
04012019
04022019
04032019
...
我想动态选择最新的文件夹(04032019
)。
任何人都可以帮助我如何在ssis中实现这一目标。
提前谢谢!
答案 0 :(得分:0)
您可以使用脚本任务来实现:
@[User::FolderPath]
)@[User:FolderPath
作为ReadWriteVariable
首先,您必须添加using System.Linq;
才能在脚本中使用Linq功能
public void Main()
{
//Change the root folder value an specify the main directory that contains the folders you need to process
string rootfolder = @"C:\Customer\";
DateTime dt;
string[] folders = System.IO.Directory.GetDirectories(rootfolder, "*", System.IO.SearchOption.TopDirectoryOnly);
string maxdatefoldername = folders.Select(x => System.IO.Path.GetFileName(x))
.Where(y => DateTime.TryParseExact(y,"MMddyyyy",System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None,out dt) == true)
.OrderByDescending(z => DateTime.ParseExact(z, "MMddyyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None)).FirstOrDefault();
string maxfolder = folders.Where(x => System.IO.Path.GetFileName(x) == maxdatefoldername).FirstOrDefault();
Dts.Variables["User:FolderPath"].Value = maxfolder;
Dts.TaskResult = (int)ScriptResults.Success;
}
答案 1 :(得分:0)
我们可以在不使用脚本任务的情况下实现这一目标。
首先,您需要在SQL Server
CREATE TABLE folder_Name (id INT IDENTITY(1,1)
, folder VARCHAR(512)
, depth INT)
,然后运行下面的SQL
语句,将文件夹名称插入表 folder_Name 。
INSERT INTO @tbl (folder, depth)
EXEC master.sys.xp_dirtree 'C:\Client',1,0;
在此之后,我们可以比较值并将其分配给用于选择该文件夹的变量,然后您可以使用循环或序列容器读取所有文件数据。