SSIS使用For循环容器不执行脚本任务和数据流任务

问题描述 投票:3回答:2

我正在与专家联系,因为我已经在最近的项目中遇到了障碍。我创建了一个SSIS包(2008R2),它使用脚本任务来构建SQL语句,其中在SQL语句中使用变量(@month1),以指定在成员资格表中的月份回溯。我还想使用@month1变量作为循环容器的“计数器”来指定执行查询的次数。 SQL查询附加到数据流任务,以将这些记录附加到SQL Server数据库的表中。脚本任务和数据流任务在for循环容器之外工作,具有为@month1变量给出的初始值,但我无法弄清楚如何使for循环容器更新@month1“counter”变量,以便for each循环可以使用它作为“计数器”,SQL语句可以在创建的SQL语句中将其用作条件。任何人都有关于如何做到这一点的想法或例子?

**更新** For循环容器是问题所在。脚本任务和数据流任务在For循环容器之外工作。它将使用@ month1的初始变量设置并创建动态sql脚本,执行脚本并将数据从源数据库服务器传输到目标源服务器。问题是当我将这些步骤放在For循环容器中时,容器执行并变为绿色但不调用其中的步骤。这就是为什么我认为容器没有读取变量@ month1,即使该变量是在包级别设置的。有什么想法吗?

sql sql-server for-loop ssis ssis-2008
2个回答
1
投票

首先,尝试将数据流Delay Validation属性设置为True。如果它仍然不起作用,而不是将变量作为参数传递给OLEDB源使用表达式:

  1. 创建一个string类型的变量。
  2. 将其EvaluateAsExpression房产改为True
  3. 设置表达式类似于: "select * from table Where column =" + (dt_str, 50)@[User::month1]
  4. 在OLEDB源中,选择访问模式为SQL Command from variable并选择此变量。

请注意,month1变量不会使用不同的范围创建两次,单击数据流任务并检查变量面板是否显示其他变量。


1
投票

我感谢大家的回应,但似乎我在这个问题上欺骗了自己。在寻找最复杂的问题时,我忽略了最简单明了的问题。我的For循环没有执行容器内部步骤的原因是因为我将@month1的初始值设置为3(故意)并且想要循环直到它被解析为-49。在EvalExpression设置中,它将进行评估,直到声明为FALSE ...因此我在@month1 <= -49的评估已经是假的。它需要是@month1 > -49所以一旦它下降到-49声明将是错误的。我对自己这样做比我应该承认的更多,看不到森林里的树木!

© www.soinside.com 2019 - 2024. All rights reserved.