如果搜索和搜索但找不到正确的答案:
我想使用SSIS包(SQL-Server 2012)移动文本文件
文件来源位于C:\ TEMP
文件的目的地位于以下三个目录之一:
文件的名称由另一个进程随机创建,并具有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中 我遇到的问题是将文件动态移动到文件系统任务中的不同(已存在)目录。
任何帮助都将受到高度赞赏。
答案 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;。
表达式不检查两个字符是否为整数,对于此任务,我们应该添加另一个控件。
我希望这有帮助。