3

在我的 ssis 包中,我在序列容器中有数据流任务。OLEDB 是源,平面文件是目标。我为平面文件的位置(@[User::strUnknownFileLocation])提供了一个变量。同样对于平面文件的名称,我添加了一个变量(@[User::StrUnknownFileName])。在数据流任务之后,我有发送邮件任务。我将该平面文件作为附件附加到发送邮件任务中。

这是我在文件名变量 (@[User::StrUnknownFileName]) 中评估的表达式。我已经在属性中设置了 Evaluate Expression is True 。

"UnknownValue_"+ (DT_STR,4,1252)YEAR(getdate()) +(MONTH( getdate()) < 10 ? "0" : "")+  (DT_STR,4,1252)MONTH(getdate()) +(DAY( getdate()) < 10 ? "0" : "") + (DT_STR,4,1252)DAY(getdate()) + ".txt"

这是在我的平面文件连接属性表达式中——连接字符串

@[User::strUnknownFileLocation]+ @[User::StrUnknownFileName]   

这是我的平面文件连接属性表达式

文件位置的变量我没有任何表达式。我在变量中添加了位置值

(@[User::strUnknownFileLocation]).

像 M:\ETL\Tmp\ 在发送邮件任务中,我有一个附件,附件的表达式如下所示,

@[User::strUnknownFileLocation]+ @[User::StrUnknownFileName]   

我昨天运行了包裹,它很好。它附加了一个文件为 UnknownValue_20130405.txt。但是今天打开包裹,发送邮件任务出错。当我点击错误时,它说它找不到文件 UnknownValue_20130406.txt 或者我没有打开该位置的权限。它有点奇怪。

所以,我执行 DFT 任务。所以文件生成了。然后它可以工作,因为文件在那里。那么为什么它不首先运行。所以现在明天当我打开我的包并尝试运行时,它不会运行,因为那个日期没有文件?但是,如果我只运行 DFT 任务,它将生成一个平面文件,并且在该位置会有一个平面文件。但这不是应该的样子。

有什么我做错了吗?我无法理解这一点。任何帮助将不胜感激。

提前致谢。

4

1 回答 1

5

我相信您遇到了问题,因为 SSIS 作为预执行阶段的一部分,会验证它需要的所有资源是否可用。在新的一天,文件在程序包运行后才可用。

为了解决这个问题,您可以告诉您 SSIS 等到它实际需要使用资源后再验证它。在 SSIS 中的任何元素上,它都应该有一个DelayValidation默认设置为 False 的属性。在“发送邮件任务”上将值设置为 True

于 2013-04-06T21:31:03.260 回答