检测源中未映射到目标的新列,并在SSIS中失败

时间:2019-02-23 03:18:26

标签: sql-server ssis metadata etl ssis-2017

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

我在两个表中都创建了一张名为testcol的表。 SSIS传输数据。现在,我将testcol2添加到源中,但未添加到目标中。这项工作仍然可以按今天的方式运行,但是我希望它失败并报告未映射的列错误。

1 个答案:

答案 0 :(得分:1)

更新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 Source ValidatExternalMetadata属性设置为True来实现。

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

  

VS_NEEDSNEWMETADATA

请注意,执行程序包可能需要更多时间。

有关更多信息,请参阅: