You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSIS C#脚本任务:筛选特定行是否仅能通过PostExecute方法实现?

SSIS脚本任务筛选记录的实现方式

不是只能通过PostExecute方法实现,具体取决于你对需求的精确理解,以下分两种核心场景说明:

场景1:需输出同一(WorkOrderID+WorkOrderProductID)分组下的所有记录,且分组内至少有一条记录NewQty≠OldQty

这种场景必须依赖PostExecute方法,因为需要等所有行处理完毕,才能确定哪些分组符合“存在NewQty与OldQty不同”的条件。实现步骤如下:

  1. 在脚本任务的类中定义一个集合(比如List<自定义行对象>),用于缓存所有输入行;
  2. 在ProcessInputRow方法中,将每一行数据添加到集合中;
  3. 在PostExecute方法中:
    • 按WorkOrderID和WorkOrderProductID对集合中的行分组;
    • 筛选出分组内存在NewQty != OldQty的组;
    • 遍历这些组的所有记录,输出到目标组件。

场景2:仅输出自身NewQty≠OldQty,且WorkOrderID+WorkOrderProductID存在重复的记录

这种场景可以结合ProcessInputRow维护状态,但最终仍需在PostExecute中完成筛选输出:

  1. 定义两个成员变量:一个集合缓存所有行,一个Dictionary<KeyValuePair<int, int>, int>(键为WorkOrderID+WorkOrderProductID的组合,值为该分组的记录数);
  2. 在ProcessInputRow中:
    • 将当前行添加到集合;
    • 更新字典中对应分组的计数(存在则+1,不存在则设为1);
  3. 在PostExecute中:
    • 遍历集合,筛选出NewQty != OldQty且字典中对应分组计数>1的记录,输出即可。

额外说明

如果你的需求只是筛选所有自身NewQty≠OldQty的记录,完全不需要PostExecute,直接在ProcessInputRow中判断,符合条件就输出即可——但这和你提到的“WorkOrderID和WorkOrderProductID相同”的条件无关,所以不属于你的目标场景。

内容的提问来源于stack exchange,提问作者gymcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:25:26