Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables SSIS Forloop:根据迭代次数为变量名赋值_Variables_For Loop_Ssis_Iteration - Fatal编程技术网

Variables SSIS Forloop:根据迭代次数为变量名赋值

Variables SSIS Forloop:根据迭代次数为变量名赋值,variables,for-loop,ssis,iteration,Variables,For Loop,Ssis,Iteration,我正在尝试使用ForLoop容器为多达10个不同的变量赋值 var1 var2 . . . var10 基于迭代次数 我需要循环根据一个变量迭代一定次数,该变量已根据查询的结果集指定了一个整数值……该部分工作正常 我不知道如何告诉forloop使用哪个变量来赋值…即如果我在Itreation#1,那么将值赋值给var1,迭代#2,然后将值赋值给var2…等等 如果您能提供任何指导,我们将不胜感激。虽然我不能100%确定您为什么希望采用这种方法,但要回答这个问题,您可以选择两种方法 在2005-2

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

var1 var2 . . . var10

基于迭代次数

我需要循环根据一个变量迭代一定次数,该变量已根据查询的结果集指定了一个整数值……该部分工作正常

我不知道如何告诉forloop使用哪个变量来赋值…即如果我在Itreation#1,那么将值赋值给var1,迭代#2,然后将值赋值给var2…等等


如果您能提供任何指导,我们将不胜感激。

虽然我不能100%确定您为什么希望采用这种方法,但要回答这个问题,您可以选择两种方法

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

我已经定义了11个变量,都是Int32类型的。计数器,然后是变量1到变量10

我的For循环配置为

将当前值赋值给变量将在脚本任务中处理。我已将计数器变量设置为只读变量,变量1-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;
    }
SQL Server 2012版提供了一个现成的表达式任务。如果您喜欢这种方法并且不在2012年,那么示例项目有一个表达式任务,您可以在服务器上构建并安装

无论如何,您可以使用
表达式和约束的优先级约束,然后在其中测试您的值


即使我有一个2012年的安装,我可能仍然会使用代码路线,因为我认为这是一个更干净的方法。不过,这两种方法都为您提供了值到VariableN的硬编码映射@STLRick(Missouri Representation!)认为在Object类型的变量中存储复杂变量可能是一种更好的方法,尽管我承认我不太明白为什么要存储For循环的值,因为你已经知道了你的范围(即使是基于动态初始值和终端值)

Hmm。。。那么,真正的问题是什么?我是说,退后一步。这是一个绝对的要求,比如说,你最终得到20个变量,命名为Var1到Var20,填充了从迭代1到20的值吗?或者,真正的需求是您需要存储for循环容器X次迭代的结果,并在以后能够访问它们吗?嗨,这些变量并不是真正称为var1…var20…我只是以这种方式键入它们,这样问题才有意义。我真正想做的是删除表的所有外键,这样我们就可以截断表,然后重新创建外键。有人创建了一个新的外键,因此旧的SSIS包在截断步骤失败,因为有一个键尚未删除。我想存储所有的foregin键名,删除它们,并重新创建它们,而不管是否有人重命名、删除或向表中添加新的外键。因此,是的,实际要求是存储X次迭代的结果,以便以后能够访问它们…:-)。好吧,我问的原因是,真正想知道的是,是否必须在变量中包含它们。下面是一篇博客文章的链接,该文章讨论了如何在SSIS中使用对象类型变量,并将其用作StringArray。我认为这将使您能够存储X个值,然后遍历并读取它们。我不能100%肯定我理解您的用例,所以我不会对此发表评论,但这应该有助于解决它的技术: