SSIS For循环:根据迭代次数为变量名赋值

时间:2012-11-26 18:18:37

标签: variables for-loop ssis iteration

我正在尝试使用ForLoop容器为最多10个不同的变量赋值......

VAR1 VAR2 。 。 。 var10

基于迭代次数。

我需要循环基于已根据查询的结果集分配了整数值的变量迭代一定次数......该部分工作得很好。

我不知道如何告诉forloop使用哪个变量来分配值....即如果我在迭代#1然后将值赋给var1,则迭代#2然后将值赋给var2。 ......等等。

非常感谢任何指导。

1 个答案:

答案 0 :(得分:2)

虽然我不是100%肯定你为什么要这种方法,但回答这个问题,你可以去2条路线

在2005-2008R2环境中,您的控制流可能看起来像这样

Control flow 2008

我已经定义了11个变量,所有类型都是Int32。计数器,然后是Variable1到Variable10。

我的For循环配置为

For Loop Editor

将在脚本任务中处理当前值到变量的赋值。我将Counter变量设置为只读变量,Variable1-10是读写。然后我在那里有一个基本的Switch语句来处理映射

    public void Main()
    {
        int counter = (Int32) Dts.Variables["User::Counter"].Value;

        switch (counter)
        {
            case 1:
                Dts.Variables["User::Variable1"].Value = counter;
                break;
            case 2:
                Dts.Variables["User::Variable2"].Value = counter;
                break;
            case 3:
                Dts.Variables["User::Variable3"].Value = counter;
                break;
            case 4:
                Dts.Variables["User::Variable4"].Value = counter;
                break;
            case 5:
                Dts.Variables["User::Variable5"].Value = counter;
                break;
            case 6:
                Dts.Variables["User::Variable6"].Value = counter;
                break;
            case 7:
                Dts.Variables["User::Variable7"].Value = counter;
                break;
            case 8:
                Dts.Variables["User::Variable8"].Value = counter;
                break;
            case 9:
                Dts.Variables["User::Variable9"].Value = counter;
                break;
            case 10:
                Dts.Variables["User::Variable10"].Value = counter;
                break;
            default:
                break;
        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }

2012版SQL Server提供了现成的Expression Task。如果您更喜欢这种方法而不是2012年,那么示例项目就有一个可以在您的服务器上构建和安装的表达式任务。

无论如何,您使用Expression and Constraint的优先约束,然后在那里测试您的值。

enter image description here

即使我安装了2012,我仍然可以选择代码路由,因为我认为这是一种更清洁的方法。这两种方法都为您提供了对VariableN的硬编码映射值。 @ STLRick(密苏里代表!)想到将一个复杂的变量存储在Object类型的变量中可能是一种更好的方法,尽管我承认我不太理解你为什么要将For循环的值存储为你已经知道你的范围(即使是基于动态的初始值和终值)