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

Sql SSI使用For循环容器不执行脚本任务和数据流任务,sql,sql-server,for-loop,ssis,ssis-2008,Sql,Sql Server,For Loop,Ssis,Ssis 2008,我正在和专家们接触,因为我最近的一个项目遇到了困难。我已经创建了一个SSIS包(2008R2),它使用脚本任务来构建SQL语句,其中SQL语句中使用了一个变量(@month1)来指定成员表中的月份回顾。我还想使用@month1变量作为循环容器的“计数器”,以指定执行查询的次数。SQL查询附加到数据流任务,以将这些记录附加到SQL server数据库的表中。脚本任务和数据流任务在for循环容器外部工作,其初始值为@month1变量,但我不知道如何使for循环容器更新@month1计数器变量,以便f

我正在和专家们接触,因为我最近的一个项目遇到了困难。我已经创建了一个SSIS包(2008R2),它使用脚本任务来构建SQL语句,其中SQL语句中使用了一个变量(
@month1
)来指定成员表中的月份回顾。我还想使用
@month1
变量作为循环容器的“计数器”,以指定执行查询的次数。SQL查询附加到数据流任务,以将这些记录附加到SQL server数据库的表中。脚本任务和数据流任务在for循环容器外部工作,其初始值为
@month1
变量,但我不知道如何使for循环容器更新
@month1
计数器变量,以便for-each循环可以将其用作“计数器”SQL语句可以将其用作已创建SQL语句中的条件。有人对如何做到这一点有什么想法或例子吗? **更新**
For循环容器就是问题所在。脚本任务和数据流任务在For循环容器外部工作。它将使用@month1的初始变量设置,创建动态sql脚本,执行脚本,并将数据从源数据库服务器传输到目标源服务器。问题是,当我将这些步骤放在For循环容器中时,容器会执行并变为绿色,但不会调用其中的步骤。这就是为什么我认为容器没有读取变量@month1,即使变量设置在包级别。有什么想法吗?

首先,尝试将数据流
延迟验证
属性设置为
True
。如果仍不工作,请使用以下表达式,而不是在OLEDB源代码中将变量作为参数传递:

  • 创建字符串类型的变量
  • 将其
    evaluatesExpression
    属性更改为
    True
  • 将表达式设置为类似于:

    "select * from table 
     Where column =" + (dt_str, 50)@[User::month1]
    
  • 在OLEDB源中,从变量中选择访问模式为
    SQL命令
    ,然后选择此变量


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

    我很欣赏大家的反应,但我似乎在这件事上欺骗了自己。在寻找最复杂的问题时,我忽略了最简单和最明显的问题。我的For循环没有在容器内执行步骤的原因是,我将
    @month1
    的初始值设置为
    3
    (有意),并希望循环,直到解析为
    -49
    。在
    EvalExpression
    设置中,它将求值直到语句为FALSE…因此我在
    @month1-49
    中的求值结果是,一旦它降到-49,语句将为FALSE。我对自己做的比我应该承认的还要多,不能以貌取人

    所有表都在同一台服务器上吗?如果是这样,我建议您在存储过程中执行此操作,而不是在SSIS中。如果必须在SSIS中执行此操作,则需要将此增量放在迭代表达式中。很遗憾,表不在同一服务器上,而且我的组织不允许使用“链接服务器”。数据在一个我只有读取权限的生产箱中,我正在将其移动到一个测试服务器/数据库中进行初步开发和概念验证。我已经更新了For循环容器中的那些字段来指定迭代次数,但它似乎没有读取变量。不允许链接服务器是个好主意。因此,您肯定需要使用SSI。我重新阅读了您的描述,听起来您只需要将数据流放入for循环中。当你说“似乎不”之类的话,你的解释有点含糊不清时,你真的需要对问题做更多的分析。以交互方式运行包时会发生什么?循环是否没有重复运行,或者您没有看到预期的数据?嗨,抱歉,Nick以为我在最初的帖子中提到了这一点。当放置在For循环中时,所有内容都会成功“运行”,因为它会变为绿色,但不会移动任何数据。因此,这让我相信变量没有被读取或可用于for循环容器。我在包级别设置了变量作用域,并为InitExpression设置了@[User::month1],@[User::month1]尝试将数据流的
    Delay validation
    属性设置为trueI,如果有效,我将尝试并回复注释。感谢您的回复和建议!:)这是一个关于同一个命名变量在多个作用域中的非常好的观点!!!!这很容易做到(尤其是在容器中),但很难拿起。我总是在包级别使用所有变量来阻止这种情况的发生。我删除了最后一句话,因为它不是真的。我们都可能犯同样的错误。别忘了将你的答案标记为已接受,如果你发现另一个答案有帮助,请随意投票