是否有可以在插入期间执行动态更新的SSIS组件?

时间:2012-09-11 16:11:00

标签: tsql ssis

我有一张可能有数十亿条记录的表格。要求是将表中一组记录的某些字段设置为先前的值,直到该值更改,然后将该值替换为新值。

请考虑以下内容作为从原始来源检索的记录的示例:

EventSeqNo EventDesc DescId Desc2Id Desc3Id Desc4Id Desc5Id
1 EventOne 1 102 1 1 1
2 EventTwo 2862 1 1 1 131
3 EventThree 1 1 1 1 1
6 关 1 102 1 102 1
1 EventOne 1 105 1 1 1
2 EventTwo 2873 1 1 1 131
3 EventThree 1 101 106 1 1
6 关 1 1 1 102 1

插入决赛桌后所需的输出为:

EventSeqNo EventDesc DescId Desc2Id Desc3Id Desc4Id Desc5Id
1 EventOne 1 102 1 1 1
2 EventTwo 2862 102 1 1 131
3 EventThree 2862 102 1 1 131
6 关 2862 102 1 102 131
1 EventOne 1 105 1 1 1
2 EventTwo 2873 105 1 1 131
3 EventThree 2873 101 106 1 131
6 关 2873 101 106 102 131

如您所见,每个字段都应获取前一个字段记录的值,除非它是值1。此外,重复此规则的记录范围将分组,范围从1到6作为事件值。

是否有一个SSIS组件可以在初始记录插入期间以最小的复杂性优雅地完成此任务,而不是在表的填充后对表执行复杂的SQL更新?

有人向我建议,缓存转换任务可能是解决方案,但在阅读了如何实现它之后,它似乎不是解决该问题的合适解决方案。

如果没有任何可以作为解决方案适应的SSIS包任务,还有哪些其他可能的替代方案?我愿意接受任何合理的建议。

由于

1 个答案:

答案 0 :(得分:1)

假设您可以保证insert的顺序,我会将数据插入到一个临时表中,该表具有一个标识和一个父id的列(启动空值)。然后我将在SSIS中使用执行SQL任务来转换数据(首先设置父id值(因此每个相关任务都有一列告诉它组中的第一个任务)使变换更简单)。在转储表中转换数据之后,我会从登台表到最终表执行简单的数据流。但是,如果有机会查看csv以添加一个列来将记录组合​​在一起,我会坚持认为,迟早其中一些会出现故障。