【问题标题】:ssis temp table exec procssis 临时表 exec proc
【发布时间】:2018-02-14 02:10:02
【问题描述】:

这里是 SSIS 新手。

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

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

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

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

【问题讨论】:

  • 有一些解决方案。首先告诉我你希望在##roster5, ##roser)member_news5 中有多少行。
  • 哎呀,##roster5 只是全名的缩写;脚本生成了大约 500 万行
  • 您会看到一些将#temp 表转换为表变量(例如@temptable)的建议。优化器会将变量表视为具有单行的表,这会影响性能。您还将看到其他建议,例如 set frmt off (stackoverflow.com/questions/1579476/using-temp-tables-in-ssis) 。这也会导致性能下降。我会创建一个带有可识别模式的临时表,填充它,然后通过截断。
  • 超过 5M 行的表变量??!??!!我已经尝试添加您发布的线程建议的一些内容。直接在 PROC 中: SET NOCOUNT ON SET FMTONLY OFF SELECT TOP 0 field = CAST(NULL AS INT) IF 1 = 0 BEGIN -- Publish metadata SELECT CAST (NULL AS INT) AS id, CAST (NULL AS NCHAR (10)) AS [Name], CAST (NULL AS NCHAR ( 10 )) AS SirName END 在调用对象中: IF 1 = 0 BEGIN SELECT CAST(null as int) AS Foo END;执行 usp_WaterfallLogic
  • 另一件事:在对象中预先创建表:SELECT TOP 0 field = CAST(NULL AS INT);如果 OBJECT_ID('tempdb..##ROSTER_MEMBER_NEW5') 不为空 drop table ##ROSTER_MEMBER_NEW5 create table ##ROSTER_MEMBER_NEW5 (...

标签: ssis proc validationerror global-temp-tables


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2011-10-28
      相关资源
      最近更新 更多