2013-12-31 4 views
6

Wenn eine für jede Schleife Einrichtung Produkte von einem „objProduct“ Objektvariable zu lesen, ich habe drei Optionen in „Enumerator Mode“ Scheibe als Momentaufnahme zeigt:Was sind "Zeilen in allen Tabellen" für jede Schleife?

enter image description here

I „Zeilen in der ersten kennen Tabelle "ist die richtige Option für den aktuellen Fall. Ich bin allerdings gespannt, in welchen Szenarien die zweite und dritte Option verwendet werden.

Scheint, dass "ADO Object Source Variable" mehrere Tabellen enthält, wenn 2./3. angewendet wird. Das ist verwirrend ... sollte nicht eine Variable als eine Tabelle betrachtet werden und somit nur die erste Option benötigt werden?

P.S. Ich habe Untersuchungen und nur MSDN wirft etwas Licht wie unten, aber nicht ganz klar, wann sie angewendet werden und für welchen Zweck.

**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

Ich habe Ihren Titel bearbeitet. Bitte lesen Sie "[Sollten die Fragen" Tags "in ihren Titeln enthalten?] (Http://meta.stackexchange.com/questions/19190/)", wobei der Konsens "nein, sie sollten nicht" lautet. –

+0

Vielen Dank! Werde beim nächsten Mal mehr Aufmerksamkeit darauf richten :-) – Echo

Antwort

13

Lassen Sie uns sagen, dass Sie die folgende SQL in einem Execute SQL Task (unter Verwendung eines ADO.NET-Verbindung) ausführen und Sie speichern das gesamte Ergebnis in einem SSIS-Objektvariable gesetzt.

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 

Diese Aufgabe ist eigentlich ein System.Data.DataSet, die mehrere Ergebnismengen (über die Tables Eigenschaft) enthalten kann. Jede dieser Ergebnismengen ist ein System.Data.DataTable Objekt. Innerhalb jedes Ergebnissatzes (oder System.Data.DataTable) haben Sie rows.

enter image description here

Die Rows in all tables (ADO.NET dataset only) und All tables (ADO.NET dataset only) Optionen verwendet werden können, wenn Sie durch alle Ergebnismengen müssen iterieren (statt nur die erste). Der Unterschied zwischen den beiden besteht darin, welche Objekte überzählig sind.

Zeilen in allen Tabellen (nur ADO.NET-Dataset) - alle Datenzeilen, die von der obigen SQL zurückgegeben werden, nacheinander durchlaufen und die Spaltenwerte den in Ihren Variablenzuordnungen angegebenen Variablen zuordnen. Für das obige Beispiel hätten Sie drei Iterationen (insgesamt drei Zeilen). Dieses Verhalten in einer Script Task würde wie folgt aussehen:

enter image description here

Alle Tabellen (ADO.NET-Datensatz nur) - nehmen alle Ergebnismengen aus der SQL oben und gehen durch sie eins nach dem anderen, mapping Das Ergebnis wird auf die in Variablenzuordnungen angegebene Variable festgelegt. Für das obige Beispiel hätten Sie zwei Iterationen (insgesamt zwei Ergebnismengen). Dieses Verhalten in einem Script Task würde wie folgt aussehen:

enter image description here

Ich habe noch nie die Notwendigkeit, entweder eine dieser Optionen verwenden musste, so kann ich keine bestimmten Szenarien nicht zur Verfügung stellen, wo ich sie verwendet habe, .

+1

Willkommen beim StackOverflow und dem SSIS-Tag.Dies ist eine fantastische Antwort und ich freue mich auf viele zukünftige wie diese;) – billinkc

+0

Vielen Dank für diese wunderbare Antwort! Klar und elegant. Ich dachte, Objekt (System.Data.DataSet) würde nicht jedes Ergebnis darin unterscheiden. Hmm, scheint, es ist viel schlauer als ich erwartet hatte :-) – Echo

+0

Ich bin mir sicher, ich werde die gleiche Frage auf der Straße haben, ich hoffe nur, ich kann meinen Weg zurück zu dieser Seite finden :) – gannaway

Verwandte Themen