SSIS C#脚本任务:筛选特定行是否仅能通过PostExecute方法实现?
SSIS脚本任务筛选记录的实现方式
不是只能通过PostExecute方法实现,具体取决于你对需求的精确理解,以下分两种核心场景说明:
场景1:需输出同一(WorkOrderID+WorkOrderProductID)分组下的所有记录,且分组内至少有一条记录NewQty≠OldQty
这种场景必须依赖PostExecute方法,因为需要等所有行处理完毕,才能确定哪些分组符合“存在NewQty与OldQty不同”的条件。实现步骤如下:
- 在脚本任务的类中定义一个集合(比如
List<自定义行对象>),用于缓存所有输入行; - 在
ProcessInputRow方法中,将每一行数据添加到集合中; - 在
PostExecute方法中:- 按
WorkOrderID和WorkOrderProductID对集合中的行分组; - 筛选出分组内存在
NewQty != OldQty的组; - 遍历这些组的所有记录,输出到目标组件。
- 按
场景2:仅输出自身NewQty≠OldQty,且WorkOrderID+WorkOrderProductID存在重复的记录
这种场景可以结合ProcessInputRow维护状态,但最终仍需在PostExecute中完成筛选输出:
- 定义两个成员变量:一个集合缓存所有行,一个
Dictionary<KeyValuePair<int, int>, int>(键为WorkOrderID+WorkOrderProductID的组合,值为该分组的记录数); - 在
ProcessInputRow中:- 将当前行添加到集合;
- 更新字典中对应分组的计数(存在则+1,不存在则设为1);
- 在
PostExecute中:- 遍历集合,筛选出
NewQty != OldQty且字典中对应分组计数>1的记录,输出即可。
- 遍历集合,筛选出
额外说明
如果你的需求只是筛选所有自身NewQty≠OldQty的记录,完全不需要PostExecute,直接在ProcessInputRow中判断,符合条件就输出即可——但这和你提到的“WorkOrderID和WorkOrderProductID相同”的条件无关,所以不属于你的目标场景。
内容的提问来源于stack exchange,提问作者gymcode
相关产品推荐
相关产品推荐

