如何在SSIS中使用foreach循环容器迭代多维数组?

时间:2012-05-24 14:06:04

标签: c# .net sql ssis foreach

我有一个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 From Variable Enumerator中的任何一个(也许两者都是)不是我应该选择的那个,或者我不能在foreach容器中使用多维数组。我搜索过,发现什么都没有,这可能很难理解,但是有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

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

enter image description here

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

enter image description here

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