6

当为每个循环设置一个从“objProduct”对象变量中读取产品时,我在“枚举器模式”窗格中获得了三个选项,如快照所示:

在此处输入图像描述

我知道“第一个表中的行”是当前案例的正确选择。但是,我很好奇将在哪些场景中使用第二个和第三个选项?

如果应用 2nd/3rd,似乎“ADO 对象源变量”将包含多个表。这令人困惑......不应该将一个变量视为一个表,因此只需要第一个选项吗?

PS 我做了研究,只有MSDN提供了一些如下信息,但不太清楚它们何时会被应用以及用于什么目的。

**Rows in all tables (ADO.NET dataset only)**
Select to enumerate rows in all tables. This option is available only if the objects to enumerate are all members of the same ADO.NET dataset.
**All tables (ADO.NET dataset only)**
Select to enumerate tables only.
4

1 回答 1

13

假设您在Execute SQL Task(使用 ADO.NET 连接)中执行以下 SQL,并将完整的结果集存储在 SSIS 对象变量中。

select * from
(select 1 as id, 'test' as description) resultSet1
;
select * from
(select 2 as anotherId, 'test2' as description union
 select 3 as anotherId, 'test3' as description) resultSet2

该对象实际上是一个System.Data.DataSet,它可以包含多个结果集(可通过Tables属性访问)。每个结果集都是一个System.Data.DataTable对象。在每个结果集(或System.Data.DataTable)中都有rows

在此处输入图像描述

当您需要遍历所有结果集(而不仅仅是第一个)时,可以使用Rows in all tables (ADO.NET dataset only)and选项。All tables (ADO.NET dataset only)两者之间的区别在于枚举的对象。

所有表中的行(仅限 ADO.NET 数据集) - 获取从上述 SQL 返回的所有数据行并一一遍历它们,将列值映射到变量映射中指定的变量。对于上面的示例,您将总共进行 3 次迭代(总共 3 行)。a 中的这种行为Script Task看起来像这样:

在此处输入图像描述

所有表(仅限 ADO.NET 数据集) - 从上面的 SQL 中获取所有结果集并一一遍历它们,将结果集映射到变量映射中指定的变量。对于上面的示例,您将总共有 2 次迭代(总共 2 个结果集)。a 中的这种行为Script Task看起来像这样:

在此处输入图像描述

我从来不需要使用这些选项中的任何一个,所以我无法提供我使用过它们的任何特定场景。

于 2013-12-31T20:52:37.273 回答