忽略 SSIS 的 OLE DB 目标中的重复记录

Ignore duplicate records in SSIS' OLE DB destination

我正在使用 OLE DB 目标用网络服务的值填充 table。

包裹将安排在前一天 activity 的凌晨 运行。但是,如果失败,可以手动执行打包。

我担心的是,如果操作员选择的日期范围与现有数据重叠,整个包将失败(已验证)。

我要:

如果重要的话,我正在使用 Data access mode = Table or view - fast load

欢迎就如何实现这一点提出建议。

我会这样做:

  • 将您的 SSIS 目标指向一个空的暂存 table 当包裹是 运行.

  • 将所有行插入暂存区 table。

  • 运行 一个存储过程,它使用 SQL 从 暂存 table 到最终目的地 table,其中记录不 已经存在于目的地 table.

  • 收集所需的元数据并用它做任何你想做的事情。

  • 清空分段 table 以供下次使用。

(最后 3 个步骤将全部在同一个存储过程中完成)。

这不是一项功能。

如果您不希望出现错误(重复),那么您需要防范它——就像您在使用您喜欢的语言时所做的那样。您不依赖于错误处理,而是测试是否存在引发错误的事物(查找转换以识别目标中是否存在行),然后过滤掉重复项(重定向无匹配输出)。

绝对不应该实施的技术方案

将访问模式从 "Table or View Name - Fast Load" 更改为 "Table or View Name"。这将插入方法从 bulk/set-based 操作更改为单例插入。通过一次插入一行,这将允许 SSIS 包计算每行保存的 success/fail。您 然后 需要进入高级编辑器,您的屏幕截图,并将错误处理从 Fail Component 更改为 Ignore Failure

不应使用此解决方案,因为它会产生较差的性能、产生不必要的工作负载并且有可能掩盖除 "duplicates" 之外的其他保存错误 - 例如引用完整性违规