sql-server - 检测源中未映射到目标的新列并在 SSIS 中失败
问题描述
如果源表中的列在目标表中没有对应的列,或者至少故意决定不包含它,如何导致 SSIS 2017 包失败?
我在两个名为 test 的表格中都制作了一个表格,其中有一列 testcol。SSIS 传输数据。现在我将 testcol2 添加到源,但没有添加到目标。该作业仍然按照今天的处理方式运行良好,但我希望它失败并报告未映射的列错误。
解决方案
更新 1
在对这个问题进行了更多研究之后,看起来这ValidatExternalMetadata
并不能满足您的需求。它只会跟踪所选列上发生的元数据更改。
基于此,我认为 SSIS 中没有选项可以执行此操作,您必须将自定义验证添加到包中,例如:
- 声明一个包含列数的变量(当您设计包时),然后添加一个执行 SQL 任务来检查当前列数(
SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?
)。如果计数不相同,则抛出异常。 - 创建一个包含源表列的引用表并添加一个执行 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 然后抛出异常。 - 使用执行 SQL 任务从数据库模式审计表中读取:
初步答案
您可以通过将 OLEDB SourceValidatExternalMetadata
属性设置为True
.
添加新列时,它应该引发类型异常。
VS_NEEDSNEWMETADATA
请注意,执行包时这可能需要额外的时间。
如需更多信息,请参阅:
推荐阅读
- unity3d - Unity erased all my progress on my project back to original state
- java - ScheduledThreadPoolExecutor 的理想 corePoolSize 是多少?
- ios - Xcode 13 快速帮助窗口无法在自定义对象上启动
- javascript - 如何在 Express 中添加自定义错误消息
- mongodb - Mongodb-按键分组数组
- c++ - 类实例不保留数据
- network-programming - 是否可以使用原始 AF_PACKET 进行通信
- python - 用零值块简化块矩阵?
- flutter - 使用 Provider 替代 GetX ever() 方法
- java - 非空 android 视图上的 java.lang.NullPointerException