6

「objProduct」オブジェクト変数から製品を読み取るための for each ループを設定すると、スナップショットが示すように、「列挙子モード」ペインに 3 つのオプションが表示されます。

ここに画像の説明を入力

「最初のテーブルの行」が現在のケースに適したオプションであることはわかっています。しかし、どのシナリオで 2 番目と 3 番目のオプションが使用されるのか興味がありますか?

2nd/3rdを適用すると「ADO Object Source Variable」に複数のテーブルが含まれるようです。それは紛らわしいです... 1 つの変数を 1 つのテーブルと見なすべきではないので、最初のオプションだけが必要ですか?

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

次の SQL をExecute SQL Task(ADO.NET 接続を使用して) で実行し、完全な結果セットを 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)、(最初の結果セットだけでなく) すべての結果セットを反復処理する必要がある場合に使用できます。2 つの違いは、列挙されるオブジェクトです。

すべてのテーブルの行 (ADO.NET データセットのみ) - 上記の SQL から返されたデータのすべての行を取得し、それらを 1 つずつ調べて、列の値を変数マッピングで指定された変数にマッピングします。上記の例では、合計 3 回の繰り返し (合計 3 行) があります。のこの動作は次のScript Taskようになります。

ここに画像の説明を入力

すべてのテーブル (ADO.NET データセットのみ) - 上記の SQL からすべての結果セットを取得し、それらを 1 つずつ調べて、結果セットを変数マッピングで指定された変数にマッピングします。上記の例では、合計 2 回の反復 (合計 2 つの結果セット) があります。のこの動作は次のScript Taskようになります。

ここに画像の説明を入力

これらのオプションのいずれかを使用する必要がなかったため、それらを使用した特定のシナリオを提供することはできません.

于 2013-12-31T20:52:37.273 に答える