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# Foreach循环中填充的SSIS对象变量设置为循环外的最后一行,无法访问整个阵列_C#_Ssis - Fatal编程技术网

C# Foreach循环中填充的SSIS对象变量设置为循环外的最后一行,无法访问整个阵列

C# Foreach循环中填充的SSIS对象变量设置为循环外的最后一行,无法访问整个阵列,c#,ssis,C#,Ssis,我有一个SSIS包,它将组装动态SQL语句并在不同的服务器上执行,结果需要写回第一台服务器。 因为SQL是作为变量创建和传入的,所以使用Foreach循环来运行每个实例。结果被放入一个对象变量中,效果很好。如果我将脚本任务放在Foreach循环中,我可以将结果写回原始服务器。然而,出于性能原因,我确实希望从Foreach循环中获取insert,并读取结果集/对象变量以打开一个连接并一次性写入所有数据。但是当我将读取结果并写入数据库的对象拉出循环时,它只写入最后一行数据,而不是全部数据。 如何访问

我有一个SSIS包,它将组装动态SQL语句并在不同的服务器上执行,结果需要写回第一台服务器。 因为SQL是作为变量创建和传入的,所以使用Foreach循环来运行每个实例。结果被放入一个对象变量中,效果很好。如果我将脚本任务放在Foreach循环中,我可以将结果写回原始服务器。然而,出于性能原因,我确实希望从Foreach循环中获取insert,并读取结果集/对象变量以打开一个连接并一次性写入所有数据。但是当我将读取结果并写入数据库的对象拉出循环时,它只写入最后一行数据,而不是全部数据。 如何访问Foreach循环之外的结果集中的所有行?有指向第一行的指针吗?我无法想象我是第一个需要这样做的人,但我对答案的搜索结果却是空的。或者我只是喝了点咖啡因。

如果满足某些条件,它可以简化。通常,SSI以元数据为中心,即一组列及其类型。因此,如果运行的每个SQL查询都返回相同的列集,包括列名、数据类型;然后您可以尝试以下方法:

  • 在ForEach循环中,运行SQL命令并将其结果存储到对象变量中
  • 然后-使用脚本组件源创建数据流任务,从步骤1对象变量获取其行。像往常一样,将行添加到一些SQL表中;如果需要,您可以添加一些其他数据,如SQL查询文本。结果行可以作为DFT目标添加到某些表中

  • 如何使用对象变量作为数据源-这里已经讨论了这个问题

    如果满足某些条件,它可以简化。通常,SSI以元数据为中心,即一组列及其类型。因此,如果运行的每个SQL查询都返回相同的列集,包括列名、数据类型;然后您可以尝试以下方法:

  • 在ForEach循环中,运行SQL命令并将其结果存储到对象变量中
  • 然后-使用脚本组件源创建数据流任务,从步骤1对象变量获取其行。像往常一样,将行添加到一些SQL表中;如果需要,您可以添加一些其他数据,如SQL查询文本。结果行可以作为DFT目标添加到某些表中

  • 如何使用对象变量作为数据源-这里已经有了这个问题要重申(同样在咖啡因不足的人群中):按原样,foreach循环触发单个命令。如何将所有单个查询(循环迭代)连接到一个查询中,供循环生成器外部使用?是否有集群?请尝试“multiSubnetFailover=Yes”。请参阅@billinkc-不完全是,抱歉没有说得更清楚。Foreach循环接收对象类型变量(User::CurrRuleSQL)中的数组,提取其中的一列作为目标数据库的SQL语句,该查询的结果存储在不同的数组对象变量[User::ResultSet]。我希望能够从Foreach循环外部读取第二个对象变量。这更有意义吗?@jdweng-cluster?不,我不这么认为。我没有考虑SQL Server解决方案,因为数据在SSIS对象变量中。你是说对象变量可以使用相同的关键字吗?哦,好的。因此对于
    C的每次迭代urrRuleSQL
    ,一个结果集被写入
    ResultSet
    ,但是,这会破坏结果,因此您只能得到循环之外可用的
    CurrRuleSQL
    的最后一次迭代的结果来重述(也在咖啡因不足的人群中):按原样,foreach循环触发单个命令。如何将所有单个查询(循环迭代)连接到将在循环生成器外部使用的单个查询中?是否有群集?请尝试“multiSubnetFailover=Yes”。请参见@billinkc-不完全如此,抱歉没有说得更清楚。Foreach循环接收对象类型变量(User::CurrRuleSQL)中的数组,提取其中的一列作为目标数据库的SQL语句,该查询的结果存储在不同的数组对象变量[User::ResultSet]中。我希望能够从Foreach循环外部读取第二个对象变量。这更有意义吗?@jdweng-cluster?不,我不这么认为。我没有考虑SQL Server解决方案,因为数据在SSIS对象变量中。你是说对象变量可以使用相同的关键字吗?哦,好的。因此对于
    C的每次迭代urrRuleSQL
    ,一个结果集被写入
    ResultSet
    ,但是,这会破坏结果,因此您只能在循环之外获得
    CurrRuleSQL
    的最后一次迭代结果?