Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSIS脚本组件增量变量_C#_Ssis_Etl - Fatal编程技术网

C# SSIS脚本组件增量变量

C# SSIS脚本组件增量变量,c#,ssis,etl,C#,Ssis,Etl,我正在尝试做我认为简单的事情,但无法实现它。我想在数据流任务中增加一个简单变量 变量在ReadWriteVariables中设置,没有输出列或输入列 这是最终目标(我将避免分享我当前代码中的怪物): 我想我遗漏了一些东西(在C#和.Net方面非常初级),因此任何帮助都将不胜感激 编辑: 我想根据查找增加我的“更新”或“插入”变量:。在这里,它总是“更新” 我的错误是:。注意,它说“at Variables.get_intDatasourceInserted()”,但我从来没有在这里讨论过这个分

我正在尝试做我认为简单的事情,但无法实现它。我想在数据流任务中增加一个简单变量

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

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

我想我遗漏了一些东西(在C#和.Net方面非常初级),因此任何帮助都将不胜感激


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

我的错误是:。注意,它说“at Variables.get_intDatasourceInserted()”,但我从来没有在这里讨论过这个分支。因此,我在“插入脚本”中对增量行进行了注释,它成功了

但是,当我使用“insert”案例时,正如我当前禁用它一样,它不会增加。

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

您正在发布“更新”代码段,错误表示您正在尝试更新intDatasourceInserted,这可能在“插入”的PreExecute()中。这是不允许的


在这两种情况下,您仍然会遇到问题,因为那里的每个任务都同时执行,等待管道数据,并且变量在一个数据流中的任务之间不能很好地工作,您可能需要在数据流动时损坏数据本身,或者访问控制流中数据流之外的已更改变量。

您需要在行处理之外重新标记变量

public int counter = 0;

public void main()
{
     counter++;
}
最后将变量设置为计数器

执行后

Variables.Counter = counter;

什么使你认为它没有被增加?请注意,当您的包停止执行时,所有变量都会返回其默认值—它们不会被保留。很可能有一种更简单的方法来做你正在做的事情。如果你在SSIS中做了很多脚本,我建议你做了一些错误的事情。我总是有一个错误(现在我想起来了,我也应该发布它…)。我将用新发现编辑我的帖子。所有数据都在同一台服务器上吗?不要使用SSI使用存储过程。我不能这样做:公司策略。此外,这将是一场维护的噩梦。IMHO在存储过程中更容易维护。当然更快。但我不知道全部情况。我当然也看到过相当多的慢而复杂的SSIS包,其中充满了不知道如何使用数据库的程序员创建的脚本!嗯,这就是我猜测的,也是为什么我凭直觉评论了另一个脚本中的这句话。但这对我来说没什么意义。。。我想它与可变上下文或并发性或诸如此类的东西有关?我找到的解决方案是使用一个rowcount和另一个带有表达式的变量来添加我的rowcount。它需要20个变量。。。为了清洁起见,我想用脚本组件重做它,因为我发现它更好。我会继续写这篇文章,希望有人能找到我想要的解决方案。谢谢你的帮助。上下文和并发是一个很好的表达方式。我经常在数据流中设置可写变量(有时更大的对象变量),这是可以预测的,只是不允许两个任务编辑同一个变量,并且唯一的目的是在下游控制任务中完成数据流后使用它(退出数据流后的任何任务,包括其他数据流)。
Variables.Counter = counter;