我使用OLE DB目标来填充来自Web服务的值的表。
该套餐将安排在上午早些时候在前一天的活动中运行。但是,如果失败,则可以手动执行包。
我担心的是,如果操作员选择覆盖现有数据的日期范围,整个包将失败(已验证)。
我想要它:
如果重要,我使用Data access mode
= Table or view - fast load
和
有关如何实现这一目标的建议表示赞赏。
答案 0 :(得分:3)
这不是一个功能。
如果你不想要错误(重复),那么你需要防御它 - 就像你用自己喜欢的语言做的那样。您不是依赖于错误处理,而是测试是否存在错误诱导的事物(查找转换以识别目标中存在的行),然后过滤掉重复项(重定向无匹配输出)。
将访问模式从“表格或视图名称 - 快速加载”更改为“表格或视图名称”。这会将插入方法从基于批量/基于集的操作更改为单例插入。通过一次插入一行,这将允许SSIS包评估每行保存的成功/失败。您然后需要进入高级编辑器,屏幕截图,并将错误处置从失败组件更改为Ignore Failure
不应使用此解决方案,因为它会导致性能不佳,产生不必要的工作负载,并且有可能掩盖其他保存错误,而不仅仅是“重复” - 例如参考完整性违规
答案 1 :(得分:0)
我将如何做到这一点:
将您的SSIS目标指向一个空的临时表 当包裹运行时。
将所有行插入临时表。
运行使用SQL从中导入记录的存储过程 staging table到最终目标表,WHERE记录没有 已经存在于目的地表中。
收集所需的元数据并随意使用它。
清空临时表以供下次使用。
(最后3个步骤都将在同一个存储过程中完成)。