2013-03-27 58 views
0

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

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

从我所知道的情况来看,它的工作方式是脚本处理每个输入行并将所有内容输出到缓冲区,然后再转到更新命令。我希望以每行为基础执行所有更新,并在每个输入行已被处理和更新时提交更改。

如何构建我的数据流以实现此目的?

我在想也许是执行源,然后通过foreach容器运行记录,但我不确定如何通过ForEach容器将多个DataFlows连接在一起。

回答

0

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

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

这馈给我的脚本。

另外,我把包在每个循环之前和之后执行SQL任务,这样我就不必使用DTC事务,并且可以处理每个输入行作为一个单独的事务。

0

我怀疑唯一的办法是把的所有东西,包括更新,放在一个脚本中。 SSIS没有公开足够的数据流缓冲策略来给你一个很好的控制级别。事实上,要在管道内加快速度,这与您正在寻找的节流策略正好相反。 (请参阅MSDN上的Data Flow Performance Features,以了解可用的调整功能。)

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

+0

感谢您的信息,但是,我决定改变我的策略,并将所有内容都转换为一个具有多个输出的脚本。我彻底改变了我的问题,我想你回答了我以前的问题。 – 2013-03-27 22:03:45

相关问题