1

我有一个数据流任务,它将行定向到数据库表(快乐的绿色路径)并将行重定向到错误文件。

我想做的是在两个数据流中添加一列,表示原始源文件的记录数,而不是流向任一方向的记录数。我在想我需要两个脚本任务的输入/输出变量。如果一行指向任一路径,则全局变量递增,其值映射到输出列。

这看起来是正确的方法吗?我从来没有锁定变量(或经常使用它们),我想知道脚本任务的 Input0_ProcessInputRow(Input0Buffer Row) 方法中的锁定是否是正确的,甚至是正确的地方。任何有关如何执行此操作或示例的建议将不胜感激。

同样,我看到了有关如何计算脚本组件的行数的示例,但它们涉及脚本任务模块级别的变量而不是外部变量。

谢谢。

4

1 回答 1

4

你会认为脚本任务会工作,但它不会。问题是 SSIS 变量的工作方式是您只能在 OnPostExecute 事件中更新它们。这就是为什么您会在 ProcessInputRow 事件中看到修改脚本任务变量的示例,并且只有在结束阶段才允许他们尝试修改变量。

因此,您有 Script Task 1 和 Script Task 2 都试图修改相同的全局值,但由于锁定和同步垃圾,它不起作用。

我认为您最好的方法是使用两个行计数转换。数一数快乐的行,数一数愤怒的行。如果您需要组合答案,只需添加第三个变量 RowsTotalInput 并使其成为表达式@[User::RowsInputHappy] + @[User::RowsInputAngry]

于 2013-04-24T02:42:28.837 回答