根据文件名表达式将带有SSIS(2013)的文件动态移动到不同的目录

时间:2016-10-05 13:11:12

标签: sql-server ssis

如果搜索和搜索但找不到正确的答案:

我想使用SSIS包(SQL-Server 2012)移动文本文件

文件来源位于C:\ TEMP

文件的目的地位于以下三个目录之一:

  1. C:\ ARCHIVE \ AAA \
  2. C:\ ARCHIVE \ BBB \
  3. C:\ ARCHIVE \ CCC \
  4. 文件的名称由另一个进程随机创建,并具有8位数文件名,如:12345678.txt,45382746.txt,99325555.txt

    使用SSIS包我想移动文件:

    到C:\ ARCHIVE \ AAA \ - 当文件名的前两位数字在10到29之间时。

    到C:\ ARCHIVE \ BBB \ - 当文件名的前两位数在30到59之间时。

    到C:\ ARCHIVE \ CCC \ - 当文件名的前两位数介于60和00之间时。

    我正在尝试执行此没有脚本任务,但只使用带有使用表达式的文件系统任务的foreach循环容器。

    我有一个foreach循环容器,它循环遍历不同的文件并将它们存储到变量user :: CurrentFile中 我遇到的问题是将文件动态移动到文件系统任务中的不同(已存在)目录。

    任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用此表达式选择目标路径(在文件系统任务中),验证文件名中的前两位是否在有用范围内,返回正确的路径:
(例如C:\ ARCHIVE \ AAA \当文件名的前两位数字介于10和29之间或......)

(DT_I4)(LEFT(@[User::CurrentFile],2)) >= 10 && (DT_I4)(LEFT(@[User::CurrentFile],2)) <= 29 ? "C:\\ARCHIVE\\AAA\\" : (DT_I4)(LEFT(@[User::CurrentFile],2)) >= 30 && (DT_I4)(LEFT(@[User::CurrentFile],2)) <= 59 ? "C:\\ARCHIVE\\BBB\\" : (DT_I4)(LEFT(@[User::CurrentFile],2)) >= 60 && (DT_I4)(LEFT(@[User::CurrentFile],2)) <= 99 ? "C:\\ARCHIVE\\CCC\\" : (DT_WSTR, 2)(LEFT(@[User::CurrentFile],2)) == "00" ? "C:\\ARCHIVE\\CCC\\" :  ""

假设@ [User :: CurrentFile]只包含文件名,例如12345678.txt;在后一种情况下,我考虑了值> = 60和&lt; = 99或==&#34; 00&#34; (理解为双零的字符串)。

此表达式必须添加到全局变量中;变量将在文件系统任务中选择,例如&#34; destination&#34;。

表达式不检查两个字符是否为整数,对于此任务,我们应该添加另一个控件。

我希望这有帮助。