【发布时间】:2019-11-26 19:07:44
【问题描述】:
我有一个带有 ForEach 文件枚举循环(完全限定名称)的 SSIS 包,其中包含一个 FTP 任务。
包执行时会遍历以下目录下子文件夹中的文件
C:\Test\Test2\ABC\
*.txt
它会将文件发布到 FTP 站点。
我在 foreach 循环中定义了一个名为 @[User::Filename] 的变量。
但是 FTP 中有文件夹,我希望文件根据从 C 驱动器上获取的文件夹转到。
C:\Test\Test2\ABC\A\1.txt
C:\Test\Test2\ABC\B\2.txt
C:\Test\Test2\ABC\C\3.txt
文件 1.txt 应该转到名为 \FTP\A 的 FTP 文件夹
文件 2.txt 应该转到名为 \FTP\B 的 FTP 文件夹
文件 3.txt 应该转到名为 \FTP\C 的 FTP 文件夹
我最初的想法是使远程路径成为一个变量,并从 foreach 循环变量中提取完全限定名称。
为此,我创建了一个名为 @[User::FilenameFTP] 的变量并将以下内容输入到表达式中
"//FTP//" +
RIGHT(
(LEFT(@[User::Filename], ABS((FINDSTRING(@[User::Filename], "//", 5)))),
ABS((FINDSTRING(@[User::Filename], "//", 5)-1)) - ABS((FINDSTRING(@[User::Filename], "//",4)+1))
)
我认为这个公式会给我文件来自的 C 驱动器中的文件名,我将其用作 FTP 任务中的远程路径变量。但是当我运行它时,文件仍然进入 \FTP\ 而不是进入子文件夹。
我对此运行了一个脚本任务,但输出也没有显示我想要的。我究竟做错了什么?不能以这种方式在 foreach 循环中编辑变量吗?
【问题讨论】:
标签: sql visual-studio ssis sql-server-data-tools