当为每个循环设置a以从“objProduct”对象变量中读取产品时,我在“枚举器模式”窗格中有三个选项,如快照所示:
我知道“第一张表中的行”是当前案例的正确选项。但是,我很好奇第二和第三个选项会在哪些场景中使用?
如果应用了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.
答案 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。
当您需要遍历所有结果集(而不仅仅是第一个结果集)时,可以使用Rows in all tables (ADO.NET dataset only)
和All tables (ADO.NET dataset only)
选项。两者之间的区别在于列举了哪些对象。
所有表中的行(仅限ADO.NET数据集) - 获取从上面的SQL返回的所有数据行并逐个遍历它们,将列值映射到您指定的变量变量映射。对于上面的示例,您将有3次总迭代(总共3行)。 Script Task
中的这种行为看起来像这样:
所有表(仅限ADO.NET数据集) - 从上面的SQL获取所有结果集并逐个遍历它们,将结果集映射到Variable Mappings中指定的变量。对于上面的示例,您将有2次总迭代(总共2个结果集)。 Script Task
中的这种行为看起来像这样:
我从来没有必要使用这些选项中的任何一个,所以我不能提供任何我使用它们的特定场景。