【问题标题】:How can I use a foreach loop container in SSIS to iterate through a multidimensional array?如何在 SSIS 中使用 foreach 循环容器来遍历多维数组?
【发布时间】:2012-05-24 14:06:04
【问题描述】:

我有一个 SSIS 包,它使用脚本和一个 foreach 容器以及其他一些东西来更新几个表。我正在使用 SqlConnectionSqlCommand 在 foreach 容器之前的脚本任务中调用此查询:

SELECT TOP 10 DirectoryID, DirectoryPath FROM ProjectDirectory ORDER BY LastAudit

并正在使用SqlDataReader 将它们添加到多维数组[10,2]。我将数组分配给对象变量DirectoryList,以便我可以在foreach 循环容器中遍历它。我相信它应该看起来像 { {"1", "C:\Folder1"}, {"2", "C:\Folder2"}, ...}。

问题是我几天前才开始使用这个软件,对 foreach 循环容器如何循环通过 DirectoryList 变量感到困惑。目前,在容器的集合选项卡中,我将 Enumerator 设置为 Foreach From Variable Enumerator,变量设置为User::DirectoryList。我将变量User::DirectoryID 设置为索引0,并将User::DirectoryPath 设置为索引1。我试图让它循环遍历数组的顶层,以便在每个循环中分配ID 和路径变量到“1”和“C:\Folder1”,然后下次通过循环时,它们被分配给“2”和“C:\Folder2”等。我有一个脚本组件,它使用路径来查找一些信息,我使用 id 来更新 sql 表的正确行。

为了调试,我让它显示第一次迭代的 ID 和路径 MessageBox.Show(Variables.DirectoryID + ", " + Variables.DirectoryPath),它显示“8, 8”。 8 对应于应该首先显示的行的 id。下一次运行时,它给了我两次正确的路径,“C:\Folder1,C:\Folder1”。所以显然变量映射不起作用,它将两个变量映射到同一个索引。在任何情况下它都不起作用,所以我在想,变量枚举器的 Foreach 不是我应该选择的,或者我不能在 foreach 容器中使用多维数组。我已经搜索并没有找到任何东西,这一切可能很难理解,但是有什么建议吗?

【问题讨论】:

    标签: c# .net sql ssis foreach


    【解决方案1】:

    好的,您实际上不必那样做。由于您的源是 t-sql 查询,您可以使用“执行 sql 任务”运行它。不过没关系,也可以这样。我现在实际上正在开发一个包,它将结果集放入脚本任务的数据表中,并将其加载到对象变量中,就像您对 DirectoryList 所做的那样。

    要读取值,只需像这样配置循环,其中变量是 Object 变量:

    在映射选项卡上,如下所示: 其中变量是您希望将第一列(索引 0)的值放入其中的包变量。您可以拥有与结果集中的列一样多的索引。

    就是这样,在您的循环中,您将可以使用当前值访问您的变量

    【讨论】:

    • 非常感谢!我最终改用了 Execute SQL Task,因为就像你说的那样,这就是脚本所做的一切。现在我只是想弄清楚如何将 DateTime 变量传递给不同的执行 SQL 任务并更新表中的一行。我去google一下,谢谢!
    猜你喜欢
    • 2013-03-26
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多