我正在与专家联系,因为我在最近的项目中碰壁。我创建了一个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的原因,即使该变量是在程序包级别设置的也是如此。有什么想法吗?
答案 0 :(得分:1)
首先,尝试将数据流的Delay Validation
属性设置为True
。如果仍然无法使用,请使用以下表达式代替在OLEDB Source中将变量作为参数传递:
EvaluateAsExpression
属性更改为True
设置类似于以下内容的表达式:
"select * from table
Where column =" + (dt_str, 50)@[User::month1]
在OLEDB源中,将访问模式选择为SQL Command from variable
,然后选择此变量。
请注意,没有两次在不同的范围内创建month1变量,请单击数据流任务,然后检查变量面板是否显示其他变量。
答案 1 :(得分:1)
我感谢每个人的回应,但似乎我欺骗了自己。在寻找最复杂的问题时,我忽略了最简单,最明显的问题。我的For循环未执行容器内部的步骤的原因是(故意)我将@month1
的初始值设置为3
并想循环直到将其解析为{{1} }。在-49
设置中,它将一直执行直到语句为FALSE ...,因此我在EvalExpression
所在的位置的评估已经是错误的。它必须为@month1 <= -49
,因此一旦下降到-49,该声明将为假。我对自己做的事比我应该承认的要多,看不见树木的森林!