每个循环中的“所有表中的行”是什么?

时间:2013-12-31 17:54:33

标签: foreach ssis enumerator foreach-loop-container

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

enter image description here

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

如果应用了2nd / 3rd,那么“ADO Object Source Variable”将包含多个表。那令人困惑......不应该将一个变量视为一个表,因此只需要第一个选项吗?

P.S。 我做了研究,只有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.

1 个答案:

答案 0 :(得分: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

enter image description here

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

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

enter image description here

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

enter image description here

我从来没有必要使用这些选项中的任何一个,所以我不能提供任何我使用它们的特定场景。