0

我有一个具有 oledb 数据源的数据流。然后我有一个执行三个 Web 服务调用的脚本组件,它有两个输出(实际上)与输入行同步(每个输入行一个输出行),一个异步输出(每个输入输出很多行排)。每个输出都转到一个 sql update 命令。还有一个错误日志输出(也是异步的)。

我希望以某种方式将输出包装在事务中,以便对于每个输入行,如果该行没有完全处理和更新,那么该输入行的更新都不会成功。

据我所知,它的工作方式是脚本处理每个输入行并将所有内容输出到缓冲区,然后再继续执行更新命令。相反,我希望在每行的基础上执行所有更新,在处理和更新每个输入行时提交更改。

我如何构建我的数据流来实现这一点?

我可能正在考虑执行源代码,然后通过 foreach 容器运行记录,但我不确定如何通过 ForEach 容器将多个 DataFlow 链接在一起。

4

2 回答 2

0

我怀疑唯一的方法是将所有内容(包括更新)放在一个脚本中。SSIS 没有公开足够多的数据流缓冲策略来为您提供良好的控制级别。事实上,它不遗余力地在管道中加快速度,这与您正在寻找的节流策略相反。(有关可用的调整功能的讨论,请参阅 MSDN 上的数据流性能功能。)

或者,您可以构建一个完全自定义的目标管道组件。鉴于在 SSIS 2008 中调试脚本组件是多么痛苦,这甚至可能是一种更可取的方法。

于 2013-03-27T21:41:08.643 回答
0

这里的解决方案是我创建了一个数据流任务,它将用户选择到一个记录集中,该记录集中放置在一个变量中。

然后我使用 For Each 容器读取记录集,并将用户名放入变量中。在 For Each 中,我有一个数据流,它有一个 OLEDB 源,它使用变量作为参数来再次选择用户(这会导致对数据集的每次迭代进行查找,但这没关系)。

这会输入到我的脚本中。

此外,我在 for each 循环中的包之前和之后放置了执行 SQL 任务,因此我不必使用 DTC 事务,并且可以将每个输入行作为单独的事务处理。

于 2013-03-28T20:15:47.893 回答