SSIS: Wczytanie listy wartości z tabeli i iteracja dla każdej z wartości

30-Gru-2014

Należało wyeksportować dane dla każdego pracownika do osobnego pliku. Ponieważ lista pracowników jest dość długa, aż prosi się o skorzystanie z paczki SSIS.

Zaczynamy od zdefiniowania listy pracowników gdzieś na serwerze SQL:

foreach_01

 

Tabela names zawiera kolumnę name, a wartości w niej znajdujące się to imiona (nazwiska, czy jakakolwiek inna informacja o pracowniku).

Budujemy projekt SSIS, a w nim umieszczamy i łączymy:

foreach_02

 

Najpierw task „Execute SQL Task”. Należy zmienić:

  • Connection – wskazujesz na źródło danych odnoszące się do serwera i bazy na którym znajduje się pokazana wcześniej tabela
  • ResultSet – wybierz FULL RESULT SET, żeby otrzymać listę wartości
  • SQL statement – zapytanie wyciągające rekordy do listy

foreach_03

 

  • w sekcji Result Set – zmień Result name na 0 (zero) a w polu wybierz zmienną o określonej przez siebie nazwie. Zmienna powinna być typu Object.

foreach_04

 

Teraz „Foreach loop”:

  • Iteracja ma się odbywać w oparciu o Foreach ADO Enumerator, czyli po obiektach pobranych z bazy
  • Tym obiektem jest zmienna User::Names

foreach_06

 

  • Wartość „bieżącej” wartości na której działa pętla będzie przechowywana w innej zmiennej. Należy ją wskazać w zakładce Variable Mapping. Zmienna powinna być typu string:

 

 

 

foreach_07

 

Pora się przekonać, że to działa. Idźmy do tasku „Script task”. Chcemy aby pojawiło się okienko dialogowe z właśnie przetwarzanym nazwiskiem:

  • Wskaż zmienną User::Name jako przekazywany do skryptu parametr
  • Kliknij Edit script

foreach_08

  • wpisz
    MessageBox.Show(Dts.Variables[„Name”].Value.ToString());
    w metodzie Main

foreach_09

 

Gotowe! Po uruchomieniu skrypt pokaże okna dialogowe po jednym dla każdego nazwiska. Debuggując zwróć uwagę, czy okienko dialogowe „nie schowało” się pod oknem Visual Studio. To często myli początkujących developerów SSIS.

 

Dodaj komentarz:

Autor: Rafał Kraik