忽略 SSIS 的 OLE DB 目标中的重复记录
Ignore duplicate records in SSIS' OLE DB destination
我正在使用 OLE DB 目标用网络服务的值填充 table。
包裹将安排在前一天 activity 的凌晨 运行。但是,如果失败,可以手动执行打包。
我担心的是,如果操作员选择的日期范围与现有数据重叠,整个包将失败(已验证)。
我要:
- 插入缺失值(如果没有重复则按预期工作)
- 忽略重复;不会导致封装失败;引发可由 windows 应用程序日志捕获的异常(记录为警告)
- 收集成功插入的记录数和重复数
如果重要的话,我正在使用 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" 之外的其他保存错误 - 例如引用完整性违规
我正在使用 OLE DB 目标用网络服务的值填充 table。
包裹将安排在前一天 activity 的凌晨 运行。但是,如果失败,可以手动执行打包。
我担心的是,如果操作员选择的日期范围与现有数据重叠,整个包将失败(已验证)。
我要:
- 插入缺失值(如果没有重复则按预期工作)
- 忽略重复;不会导致封装失败;引发可由 windows 应用程序日志捕获的异常(记录为警告)
- 收集成功插入的记录数和重复数
如果重要的话,我正在使用 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" 之外的其他保存错误 - 例如引用完整性违规