在我的ssis包中,我在序列容器中有数据流任务。 OLEDB是Source,Flat文件是Destination。 我给了平面文件的位置变量(@ [User :: strUnknownFileLocation])。另外,对于平面文件的名称,我添加了一个变量(@ [User :: StrUnknownFileName])。数据流任务后我发送邮件任务。我将该Flat文件附加为Send mail Task中的附件。
这是我在我的文件名变量(@ [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"
这是我的平面文件连接属性表达式 - 连接字符串
@[User::strUnknownFileLocation]+ @[User::StrUnknownFileName]
这是我的平面文件连接属性表达式
文件位置的变量我没有任何表达式。我在Variable
中添加了location的值(@[User::strUnknownFileLocation]).
喜欢M:\ ETL \ Tmp \ 在发送邮件任务中,我有一个附件和附件表达式,如下所示,
@[User::strUnknownFileLocation]+ @[User::StrUnknownFileName]
我跑了包裹昨天很好。它将文件附加为UnknownValue_20130405.txt。 但是当我今天打开包时,它在发送邮件任务中出错了。当我点击错误时,它说它找不到文件UnknownValue_20130406.txt或者我没有权限打开该位置。它有点奇怪。
所以,我执行DFT任务。所以文件生成了。然后它工作,因为文件在那里。那么为什么它不首先运行。所以现在明天我将打开我的包并尝试运行,它不会运行因为那个日期没有文件?但是,如果我只运行DFT任务,它将生成一个平面文件,它将在该位置有一个平面文件。但事实并非如此。
我做错了吗?我无法理解这一点。任何帮助将非常感激。
提前致谢。
答案 0 :(得分:4)
我相信您遇到了一个问题,因为SSIS作为预执行阶段的一部分,验证了所需的所有资源都可用。在新的一天,文件在包运行之后才可用。
为了解决这个问题,您可以告诉SSIS要等到实际需要使用资源才能验证它。在SSIS中的任何元素上,它应该具有DelayValidation
属性,默认情况下设置为False。在“发送邮件任务”