我创建了一个程序包,使用FTP Task从FTP中提取excel文件,然后将Excel文件处理为SQL数据库。从FTP拉出后,excel将存储在一个文件夹中。我已将文件路径存储在变量中,并在Precedence costraint中给出了一个条件,以检查该文件是否存在于该文件夹中。仅当文件路径存在时,才应执行Excel处理任务。但似乎即使文件不存在,包执行也会失败。所以我想检查一下我给出的条件是否错误。我在优先约束中给出的条件如下:
@[User::FilePath] != ""
其中 @ [User :: FilePath] 包含文件路径,即 C:\ FTPDestination \ FileName.xlsx
以上情况是否不正确?什么是正确的条件?
答案 0 :(得分:1)
使用条件@[User::FilePath] != ""
无助于验证文件是否存在。此条件仅检查字符串变量 FilePath
是否为空字符串。
您可以使用以下选项来满足您的要求。您可以放置Foreach loop container
来循环访问给定文件夹中的文件。
配置SSIS包,如屏幕截图# 1 所示。放置FTP task
,Foreach loop container
,任何任务都可以放在Foreach循环容器中。
创建4个变量,如屏幕截图# 2 所示。 FTPPath 包含下载FTP文件的路径; FolderPath 包含要保存文件的文件夹; FileExtension 是Foreach循环容器中应该匹配以循环的文件;和FilePath将是将在Foreach循环容器中循环的每个文件的路径。
配置FTP task
,如屏幕截图# 3 和# 4 所示。
配置Foreach loop container
,如scrteenshots# 5 和# 6 所示。
屏幕截图# 7 ,当文件从FTP成功下载到目标文件夹时。
屏幕截图# 8 显示在FTP文件夹中找不到匹配的文件。如果您在没有找到文件时不希望FTP任务失败,请在this Stack Overflow question中查阅我的答案。
希望有所帮助。
屏幕截图#1:
屏幕截图#2:
屏幕截图#3:
屏幕截图#4:
屏幕截图#5:
屏幕截图#6:
屏幕截图#7:
屏幕截图#8: