【问题标题】:SSIS Runs Okay Individual Tasks, Not TogetherSSIS 可以正常运行单个任务,而不是一起运行
【发布时间】:2011-03-05 10:50:03
【问题描述】:

我有一个简单的 SSIS 项目。在控制流中我分为三个步骤:

第 1 步:从 Db1.Table1 中选择数据

第 2 步:在 Db2 中创建 Table2

步骤 3:将 Db1.Table1 中的数据复制到 Db2.Table2

如果我依次“执行任务”,它执行得很好……但是如果我尝试运行整个项目,我会收到以下错误:

将数据从 Table1 复制到 DB2 时出错 dbo Table2 任务 [OLE DB 目标 [40]]:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E37。

一个 OLE DB 记录可用。来源:“Microsoft OLE DB Provider for SQL Server”Hresult:0x80040E37 描述:“无效的对象名称'DB2.dbo.Table2”。”。

【问题讨论】:

  • 步骤之间是否添加了控制流依赖?否则它们将尝试并行运行。
  • 是的。存在控制流依赖关系。

标签: sql-server tsql ssis


【解决方案1】:

问题在于验证。默认情况下,在子任务上,DelayValidation 被禁用。由于第二步创建了一个表,该表在第三步中填充了第一步中提取的数据,因此存在验证错误。 SSIS 查找该表,但它不存在。通过启用延迟验证,它运行良好 - 因为它不会强制表在执行之前存在。

【讨论】:

    【解决方案2】:

    你的控制流对我来说毫无意义。根本没有理由有一个只选择记录的步骤。当这作为一项工作运行时,谁会看到它,如果您不与他们做任何事情,那么为什么要选择。

    如果您不进行任何清理或转换,为什么还要使用 SSIS?不会;t-sql 语句 从 table1 中选择到 table2 就足够了吗?当然,如果运行不止一次,这就是问题,所以我可能会编写一个脚本来创建表,如果它不存在,截断它存在(我假设你在这里替换数据)然后插入它.

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2012-08-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      相关资源
      最近更新 更多