SSIS - FTP组件的动态文件名

时间:2012-07-20 00:06:29

标签: c# ftp ssis

我正在尝试在SSIS中创建一个数据流,以帮助我通过FTP上传文件,我遇到了一些麻烦。文件名必须是动态的,格式为filename_mmddyy.xls。因此,它每天都会应用日期并上传新文件。

我能够通过以下表达式使文件在数据流中正确保存:

@[User::path]+ 
Right("0"+(DT_STR,4,1252)DatePart("m",getdate()),2)+
Right("0"+(DT_STR,4,1252)DatePart("d",getdate()),2)+
Right("0"+(DT_STR,4,1252)DatePart("yyyy",getdate()),2)+
".xls"

但是,FTP组件不会将其作为LocalPath的表达式。我试图在原始数据流中覆盖脚本组件内的User :: path变量,但这似乎也不起作用。

我知道我错过了一切简单的东西,但是我已经盯着它看了很长时间而且它只是没有找到我。

谢谢!

修改

好的,所以在闲逛了一天之后,这就是我想出的:

我完成了创建平面文件的原始任务。旁注,我的供应商实际上需要一个真正的excel xls而不是csv,所以我必须创建一个文件连接目标,然后要求我在我的服务器上创建一个静态文件。

然后我使用脚本任务(C#)将静态文件复制到具有动态名称的文件中。当然,我必须保留原始文件,因为excel目的地需要那里。

最后,我建立了另一个文件连接并使用上面的表达式作为连接字符串。然后我让FTP任务使用文件连接作为要上传的文件。

我打算尝试将它全部修剪一下。我想我可以逃避不使用脚本任务,而是使用文件系统任务来复制和使用文件连接来帮助处理动态路径名。

我学到的底线是:在SSIS中,当它显示“PathIsVariable”时,您在该文本字段中放置的内容将被视为变量。所以如果我输入@ [User :: path],它会解析为“C:\ pathonmydrive”。然后,SSIS查找具有THAT名称的变量,即C:\ pathonmydrive,以查找该文件。这是一个反对直觉,但现在我知道我可以避免这个陷阱。

3 个答案:

答案 0 :(得分:3)

  1. 创建一个新变量,例如FilePath。使用字符串作为数据类型,在变量的属性中,将EvaluateAsExpression设置为true。
  2. 配置变量的表达式:@[User::path] + "filename_" + Right("0"+(DT_STR,2,1252)DatePart("m",getdate()),2) + Right("0"+(DT_STR,2,1252)DatePart("d",getdate()),2)+ Right("0"+(DT_STR,4,1252)DatePart("yy",getdate()),2) + ".xls"
  3. 使用表达式编辑器中的Evaluate Expression按钮查看表达式是否解析了文件的正确路径。
  4. 修改Expressions的{​​{1}}属性,并设置您在FTP task下创建的变量。

答案 1 :(得分:1)

为了更改脚本组件内的变量值,您需要先将变量作为ReadWrite传递:

enter image description here

然后,为变量设置一个新值:

Dts.Variables["folders"].Value = "value you want to assign";

答案 2 :(得分:1)

创建一个新变量,例如FilePath。使用字符串作为数据类型,在变量的属性中,将EvaluateAsExpression设置为true。 配置变量的表达式:

@[User::path] + "filename_" + Right("0"+(DT_STR,2,1252)DatePart("m",getdate()),2) + Right("0"+(DT_STR,2,1252)DatePart("d",getdate()),2)+ Right("0"+(DT_STR,4,1252)DatePart("yy",getdate()),2) + ".xls"

使用表达式编辑器中的“评估表达式”按钮查看表达式是否解析了文件的正确路径。

修改FTP任务的Expressions属性,并设置在LocalPath下创建的变量。


我已经执行了上述方法,但我仍然遇到问题The variable cannot be found ...有任何想法