1

我正在尝试在 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,以查找该文件。这有点违反直觉,但现在我知道我可以避免这个陷阱。

4

3 回答 3

4
  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您的属性FTP task并设置您在 下创建的变量LocalPath
于 2012-07-20T09:57:12.690 回答
1

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

在此处输入图像描述

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

Dts.Variables["folders"].Value = "value you want to assign";
于 2012-07-20T09:09:04.500 回答
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"

使用表达式编辑器中的 Evaluate Expression 按钮查看表达式是否解析到文件的正确路径。

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


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

于 2014-12-20T15:07:49.827 回答