首页 > 解决方案 > 检测源中未映射到目标的新列并在 SSIS 中失败

问题描述

如果源表中的列在目标表中没有对应的列,或者至少故意决定不包含它,如何导致 SSIS 2017 包失败?

我在两个名为 test 的表格中都制作了一个表格,其中有一列 testcol。SSIS 传输数据。现在我将 testcol2 添加到源,但没有添加到目标。该作业仍然按照今天的处理方式运行良好,但我希望它失败并报告未映射的列错误。

标签: sql-serverssismetadataetlssis-2017

解决方案


更新 1

在对这个问题进行了更多研究之后,看起来这ValidatExternalMetadata并不能满足您的需求。它只会跟踪所选列上发生的元数据更改

基于此,我认为 SSIS 中没有选项可以执行此操作,您必须将自定义验证添加到包中,例如:

  1. 声明一个包含列数的变量(当您设计包时),然后添加一个执行 SQL 任务来检查当前列数( SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?)。如果计数不相同,则抛出异常。
  2. 创建一个包含源表列的引用表并添加一个执行 SQL 任务以检查是否有新添加的列( SELECT Count(*) FROM Information_schema.Column T1 LEFT JOIN Source Columns T2 ON T1.COLUMN_NAME = T2.Column_name WHERE T2.Column_Name IS NULL)然后检查结果是否 > 0 然后抛出异常。
  3. 使用执行 SQL 任务从数据库模式审计表中读取:

初步答案

您可以通过将 OLEDB SourceValidatExternalMetadata属性设置为True.

添加新列时,它应该引发类型异常。

VS_NEEDSNEWMETADATA

请注意,执行包时这可能需要额外的时间。

如需更多信息,请参阅:


推荐阅读