2017-09-05 117 views
1

SSIS新手在这里。ssis temp table exec proc

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

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

我才意识到这是被扔错误的数据流任务,所以我试图把另一个SQL任务一切之前创建表,以便数据流任务将看到表中是存在的;但它仍然给我错误:“无效的对象名称”## ROSTER_MEMBER_NEW5“。”

我缺少/做错了吗?我不知道我不知道什么。看起来这不应该是复杂的(作为一个新手,我知道这是可能的...一些重复,但我不知道该怎么问这样的问题)。基于

+0

有几个解决方案。首先告诉我你期望在## roster5,## roser)member_news5中有多少行。 – plditallo

+0

oops,## roster5只是全名的缩写;有大约500万行由脚本生成 – hmmmmm

+0

您会看到一些建议将您的#temp表转换为表变量(例如@temptable)。优化器会将变量表视为具有单行的表,这将影响性能。您还将看到其他建议,例如设置frmt off(https://stackoverflow.com/questions/1579476/using-temp-tables-in-ssis)。这也会导致性能下降。我将创建一个具有可识别架构的临时表,填充它,然后通过截断时。 – plditallo

回答

0

您响应,另一种选择是在执行独立T-SQL的SQL代理作业中添加T-SQL步骤。您需要重新考虑原始SSIS包的流量控制,并将其分成2个独立的包。第一个SSIS包将执行T-SQL步骤之前所需的全部内容,下一步将执行聚合所需的实际T-SQL,然后最后一步将调用第二个包,以完成该过程。

我提供需要提醒的这个建议,这是不可取的。最适合的方法是与DBA沟通,DBA将能够为您提供一个服务帐户,以执行您的SSIS软件包,并提供截断临时表所需的提升权限,这些临时表需要您的进程管理。

0

我实际上想发布一个非答案。我试图按照上面的建议以及我可以,但没有任何工作。我的脚本应该运行,然后数据泵应该从本质上将全局temp的内容复制到另一个服务器/表。我是这样做的两个步骤,并试图使用SSIS一步完成。实际上并不需要在组件之间传递SSIS中的值。似乎这不应该那么难。

无论如何,正如我所说的没有任何工作。好吧,让我告诉我发生了什么。在犯了很多错误,大量撤消和大量失败尝试之后,一些东西开始工作。我认为其中一件事情是我将ResultSetType设置为ResultSetType_None,因为我不会使用该步骤的任何结果。如果有人认为这不是发生的事情,我很高兴听到现实,因为我想学习。

我认为这是一个非答案,因为我有一点信心,我是对的,或者说,我比事故以外的任何得到它。