1

SSIS新手在这里。

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

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

我刚刚意识到是数据流任务引发了错误,所以我尝试将另一个 SQL 任务放在其他一切之前以创建表,以便数据流任务会看到表在那里;但它仍然给我错误:“无效的对象名称'##ROSTER_MEMBER_NEW5'。”

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

4

2 回答 2

0

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

我提出这个建议,但需要注意的是,这是不可取的。最好的方法是与您的 DBA 进行沟通,他们将能够为您提供一个服务帐户来执行您的 SSIS 包,并使用截断您的进程管理所需的暂存表所需的提升权限。

于 2017-09-07T00:19:10.590 回答
0

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

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

我认为这是一个不正确的答案,因为我几乎没有信心我是对的,或者我得到它不是偶然的。

于 2017-09-07T17:05:25.507 回答