如何在ssis中动态获取最新的文件夹详细信息

时间:2019-05-04 10:19:19

标签: sql-server ssis ssis-2012

我在此路径C:\Customer\中有文件夹

文件夹名称:

04012019
04022019
04032019
...

我想动态选择最新的文件夹(04032019)。

任何人都可以帮助我如何在ssis中实现这一目标。

提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用脚本任务来实现:

  1. 在程序包中,创建一个字符串类型的变量(例如:@[User::FolderPath]
  2. 添加脚本任务
  3. 选择@[User:FolderPath作为ReadWriteVariable
  4. 使用类似的脚本:

首先,您必须添加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;

在此之后,我们可以比较值并将其分配给用于选择该文件夹的变量,然后您可以使用循环或序列容器读取所有文件数据。