[英]SSIS - Dynamic File Name for FTP Component
我正在尝试在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查找具有该名称的变量,即C:\\ pathonmydrive,以查找文件。 这有点违反直觉,但现在我知道我可以避免这种陷阱。
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"
Evaluate Expression
按钮查看表达式是否解析文件的正确路径。 FTP task
的Expressions
属性,并设置在LocalPath
下创建的变量。 为了在脚本组件内部更改变量值,您需要首先将变量作为ReadWrite传递:
然后,为变量设置一个新值:
Dts.Variables["folders"].Value = "value you want to assign";
创建一个新变量,例如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
...任何想法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.