【问题标题】:SSIS Script Component Increment variableSSIS 脚本组件增量变量
【发布时间】:2019-12-03 12:02:16
【问题描述】:

我正在尝试做对我来说似乎很简单但无法实现的事情。我想在数据流任务中增加一个简单的变量...

变量设置在ReadWriteVariables中,没有输出也没有输入列。

这是最终目标(我会避免分享我当前代码的怪物):

public class ScriptMain : UserComponent
{
    public override void PostExecute()
    {
        base.PostExecute();

        Variables.intDatasourceUpdated++;
    }
}

我想我遗漏了一些东西(对于 C# 和 .Net 非常初级),因此我们将不胜感激。


编辑: 我想根据查找增加我的“更新”或“插入”变量:lookup printscreen。在这里,它总是“更新”的。

我的错误是:error printscreen。请注意,它说“在 Variables.get_intDatasourceInserted()”,但我从不去这里的那个分支。所以我在“插入脚本”中注释了增量行并且它起作用了。

但是,当我有“插入”案例时,因为我目前已停用它,它不会增加。

【问题讨论】:

  • 是什么让你认为它没有被增加?请注意,当您的包停止执行时,所有变量都会恢复到它们的默认值 - 它们不会被保留。很可能有一种更简单的方法来做你正在做的事情。如果您在 SSIS 中编写了大量脚本,我建议您做错了。
  • 我总是有一个错误(现在我想起来了,我也应该发布它......)。我将根据新发现编辑我的帖子。
  • 所有数据都在同一台服务器上吗?不要使用 SSIS 使用存储过程。
  • 我不能这样做:公司政策。此外,这将是一场噩梦。
  • 恕我直言,在存储过程中维护起来更容易。它当然更快。但我不知道完整的故事。我当然见过相当多的缓慢而复杂的 SSIS 包,其中充满了由不知道如何使用数据库的程序员创建的脚本!

标签: c# ssis etl


【解决方案1】:

“为读取和写入访问而锁定的变量集合在 PostExecute 之外不可用”。

您正在发布您的“更新”sn-p,错误是说您正在尝试更新 intDatasourceInserted,这可能在您的“插入”的 PreExecute() 中。这是不允许的。

无论哪种情况,您仍然会遇到问题,因为那里的每个任务同时执行,等待管道数据,并且变量在一个数据流中的任务之间无法正常工作,您可能需要自行处理数据因为它在控制流中流动或访问数据流之外的更改变量。

【讨论】:

  • 嗯,这就是我的猜测,也是我凭直觉在另一个脚本中评论该行的原因。但这对我来说毫无意义......我想它与可变上下文或并发性或类似的东西有关?我找到的解决方案是使用一个行数和另一个带有表达式的变量来添加我的行数。它需要 20 个变量......为了清洁起见,我想用脚本组件重做它,因为我发现它更好。我会继续写这篇文章,希望有人有我想要的解决方案。感谢您的帮助。
  • 上下文和并发是一个很好的说法。我经常在数据流中设置可写变量(有时是更大的对象变量),并且只能通过不让两个任务编辑同一个变量并且仅在数据流在下游控制任务(之后的任何任务退出数据流,包括其他数据流)。
【解决方案2】:

您需要在行处理之外对变量进行 decalre。

public int counter = 0;

public void main()
{
     counter++;
}

最后将变量设置为计数器。

执行后...

Variables.Counter = counter;

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2023-04-02
    • 2022-01-02
    • 2012-11-07
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多