我的第一个“高级”SSIS包存在并行问题。
首先,这是包的结尾:
这个包裹是什么:
每个文件加载只生成一个日志行,因此成功和失败日志信息写在同一行(由执行guid和导入的文件名标识,因为它可以在同一执行期间导入多个文件),但填充的列是不一样。
两个OLE DB命令都调用相同的存储过程:
在有人提出问题之前,这很有效:有时执行会生成2行:一行包含成功信息,另一行包含被拒绝的行。
在分析之后,我注意到可能同时执行两个OLE DB命令,因此两者都看不到现有行并且都插入一个新行。
我想知道是否有办法阻止OLE DB命令同时执行。性能在这里不是问题,因此我不关心它是否会产生更高的执行时间。
我看到的唯一解决方案是在表上添加一个唯一约束并捕获错误但我不确定这是一个非常“优雅”的解决方案(我不喜欢重复UPDATE语句的想法,“正常的“一个和”例外“一个”所以我正在寻找一个不涉及捕获异常的解决方案!
当然,如果没有更好的解决方案,我想我会这样做。
答案 0 :(得分:3)
您应该能够将两个日志路径合并为一个写操作。不幸的是,这意味着需要对它们进行排序:http://msdn.microsoft.com/en-us/library/ms141703.aspx
请注意,像这样反复调用OLEDBCommand对于大型操作来说并不是一个好主意 - 有时将所有数据放入临时表然后使用单个命令来执行操作要好得多。
答案 1 :(得分:1)
由于您在OLEDB命令中使用存储过程,因此您只需使用联合。那样你就不用排序了。 OLEDB命令将为每一行处理一次。