我有一个SSIS包,它使用脚本和foreach容器更新几个表,以及其他一些东西。我正在使用SqlConnection
和SqlCommand
在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容器中使用多维数组。我搜索过,发现什么都没有,这可能很难理解,但是有什么建议吗?
答案 0 :(得分:2)
要读取值,只需像这样配置循环,其中变量是Object变量:
并在映射选项卡上,如下所示: 其中变量是包变量,您希望将第一列(索引0)的值放在其中。您可以拥有与结果集上的列一样多的索引。
就是这样,在你的循环中你可以使用当前值访问你的变量