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

时间:2019-02-28 20:02:54

标签: sql sql-server for-loop ssis ssis-2008

我正在与专家联系,因为我在最近的项目中碰壁。我创建了一个SSIS包(2008R2),该包使用脚本任务来构建SQL语句,其中在该SQL语句中使用了变量(@month1),以指定成员资格表中的月份。我还想将@month1变量用作循环容器的“计数器”,以指定执行查询的次数。 SQL查询附加到数据流任务,以将这些记录附加到SQL Server数据库上的表中。脚本任务和数据流任务在for循环容器之外工作,并为@month1变量提供了初始值,但我无法弄清楚如何使for循环容器更新@month1“ counter”变量这样,for每个循环都可以将其用作“计数器”,而SQL语句可以将其用作创建的SQL语句中的条件。有人对此有任何想法或示例吗?

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

2 个答案:

答案 0 :(得分:1)

首先,尝试将数据流的Delay Validation属性设置为True。如果仍然无法使用,请使用以下表达式代替在OLEDB Source中将变量作为参数传递:

  1. 创建一个字符串类型的变量。
  2. 将其EvaluateAsExpression属性更改为True
  3. 设置类似于以下内容的表达式:

    "select * from table 
     Where column =" + (dt_str, 50)@[User::month1]
    
  4. 在OLEDB源中,将访问模式选择为SQL Command from variable,然后选择此变量。

请注意,没有两次在不同的范围内创建month1变量,请单击数据流任务,然后检查变量面板是否显示其他变量。

答案 1 :(得分:1)

我感谢每个人的回应,但似乎我欺骗了自己。在寻找最复杂的问题时,我忽略了最简单,最明显的问题。我的For循环未执行容器内部的步骤的原因是(故意)我将@month1的初始值设置为3并想循环直到将其解析为{{1} }。在-49设置中,它将一直执行直到语句为FALSE ...,因此我在EvalExpression所在的位置的评估已经是错误的。它必须为@month1 <= -49,因此一旦下降到-49,该声明将为假。我对自己做的事比我应该承认的要多,看不见树木的森林!