1

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

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 表的正确行。

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

4

1 回答 1

2

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

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2012-05-24T15:34:57.420 回答