ssis temp table exec proc

时间:2017-09-05 17:52:42

标签: ssis proc validationerror global-temp-tables

SSIS新手在这里。

我有一个基于向导创建的SSIS包。我添加了一个SQL任务来运行我之前单独运行的脚本,以便将过程简化为一步。该脚本使用了大量的临时表,最后使用了一个全局的## temp,以便在流程外部访问结果。

当我尝试执行包时,我得到一个复杂的“包验证错误”(错误代码0x80040E14)。我认为错误消息的操作部分是“无效的对象名称'## roster5'。”

我刚刚意识到数据流任务正在抛出错误,所以我尝试在其他所有内容之前放置另一个SQL任务来创建表,以便数据流任务会看到表存在;但它仍然给我错误:“无效的对象名称'## ROSTER_MEMBER_NEW5'。”

我错过了什么/做错了什么?我不知道我不知道的是什么。看起来这应该不是那么复杂(作为一个新手,我知道这可能是......的重复,但我不知道怎么回答这个问题。)

2 个答案:

答案 0 :(得分:0)

根据您的回复,另一个选项是在执行独立T-SQL的SQL代理作业中添加T-SQL步骤。您需要重新考虑原始SSIS包的流控制,并将其拆分为2个单独的包。第一个SSIS包将执行T-SQL步骤之前所需的所有操作,下一步将执行聚合所需的实际T-SQL,然后最后一步将调用第二个包,这将完成该过程。

我提供这个建议时需要注意的是,这是不可取的。最有效的方法是与您的DBA沟通,DBA将能够为您提供服务帐户,以执行您的SSIS包,并使用提升权限来截断您的流程需要存在的临时表。

答案 1 :(得分:0)

我其实想要发一个非答案。我试图按照上面的建议尽可能地遵循,但没有任何效果。我的脚本应该运行,然后数据泵应该,实质上将全局临时文件的内容复制到另一个服务器/表。我这样做是两步,并尝试使用SSIS一步完成所有操作。实际上并不需要在SSIS中将值从组件传递到组件。它似乎不应该那么难。

无论如何,正如我所说,没有任何效果。好吧,让我告诉我的想法。在犯了很多错误,很多撤消以及许多不成功的尝试之后,一些东西开始起作用了。我认为有贡献的一件事是我已将ResultSetType设置为ResultSetType_None,因为我不会使用该步骤中的任何结果。如果有人认为这不是发生的事情,我很高兴听到现实,因为我想学习。

我认为这不是一个答案,因为我没有信心我是对的,或者说我是通过其他事故得到的。