在我的 ssis 包中,我在序列容器中有数据流任务。OLEDB 是源文件,平面文件是目标文件。我为平面文件的位置提供了一个变量 (@[User::strUnknownFileLocation])。同样对于平面文件的名称,我添加了一个变量(@[User::StrUnknownFileName])。在数据流任务之后,我有发送邮件任务。我在发送邮件任务中将该平面文件作为附件附加。
这是我在文件名变量 (@[User::StrUnknownFileName]) 中评估的表达式。我已将其设置为属性中的 Evaluate Expression 为 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"
Run Code Online (Sandbox Code Playgroud)
这是在我的平面文件连接属性表达式中 --Connection string
@[User::strUnknownFileLocation]+ @[User::StrUnknownFileName]
Run Code Online (Sandbox Code Playgroud)
这是在我的平面文件连接属性表达式中
文件位置的变量我没有任何表达。我在变量中添加了位置值
(@[User::strUnknownFileLocation]).
Run Code Online (Sandbox Code Playgroud)
像 M:\ETL\Tmp\ 在发送邮件任务中,我有一个附件,附件的表达式如下所示,
@[User::strUnknownFileLocation]+ @[User::StrUnknownFileName]
Run Code Online (Sandbox Code Playgroud)
我跑了包昨天很好。它附加了一个名为 UnknownValue_20130405.txt 的文件。但是今天打开包裹的时候,在发送邮件的任务中出现了错误。当我单击错误时,它说找不到文件 UnknownValue_20130406.txt 或我无权打开该位置。它有点奇怪。
所以,我执行 DFT 任务。所以文件生成了。然后它可以工作,因为文件在那里。那么为什么它不首先运行。所以现在明天当我打开我的包并尝试运行时,它不会运行,因为那个日期没有文件?但是,如果我只运行 DFT 任务,它将生成一个平面文件,并且在该位置会有一个平面文件。但这不是它应该的样子。
有什么我做错了吗?我无法理解这一点。任何帮助将不胜感激。
提前致谢。
我相信您遇到了一个问题,因为作为预执行阶段的一部分,SSIS 会验证它需要的所有资源是否可用。在新的一天,文件在包运行后才可用。
为了解决这个问题,您可以告诉您 SSIS 在验证它之前等待它实际需要使用资源。在 SSIS 中的任何元素上,它都应该有一个DelayValidation默认设置为 False的属性。在“发送邮件任务”中将值设置为 True