【问题标题】:SSIS package is executing while modification done on source table对源表进行修改时正在执行 SSIS 包
【发布时间】:2017-12-20 07:40:54
【问题描述】:

我使用简单的 DFT 创建了一个 SSIS 包,并将文件从 OLEDB 源传输到 OLEDB 目标。当我在源表中添加新列时,包仍然可以成功执行,但我希望我的包失败。任何人都可以建议如何解决它。

【问题讨论】:

  • 你不能让它失败,因为它保存了你表的元数据,而且你还没有映射你的新列。然后它只是继续进行,因为没有添加任何内容。如果你需要让它失败,你需要一个 SQL 脚本来编写当新行添加到这个表时它应该失败。

标签: sql-server ssis etl ssis-2012


【解决方案1】:

在控制流区域中,在您的 DFT 前添加一个Execute SQL Task。 设置与您的数据库的连接,并为您的 SQLStatement 使用以下内容:

CREATE TABLE #temp (<define all columns currently in your OLEDB Source Table>)

INSERT INTO #temp 
SELECT TOP 1 * 
FROM <your OLEDB Source Table>

通过使用这种“最糟糕的做法”插入语法,如果您的 OLEDB 源表添加或删除了任何列,您可能会导致失败。

【讨论】:

    【解决方案2】:

    在 OLEDB Source 中选择表时,表的元数据映射到 OLEDB Source 组件。

    每次运行包时,它都会向 SQL 服务器发送 SELECT * From Table 命令,并检索数据,并将 SQL 表中的每一列映射到 OLEDB Source 列。

    如果在 SQL 中找到一个列并且它没有在 OLEDB Source 中定义,它将被忽略。另一方面,如果在 SQL 中找不到列并且它在OLEDB Source 中定义,则会抛出异常。

    在运行包之前验证元数据的唯一方法是添加Execute SQL TaskScript Task 以在执行DFT 之前检查元数据。

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多