WHILE petlja u SSIS paketima korišćenjem Foreach Loop Container-a

Objavljeno: 28-05-2015 | Autor: Žana (Jovana) Baćović | Kategorija: SSIS

0

Kada u SSIS paketima želimo da izvršimo određeni skup radnji za više različitih entiteta ili djelova entiteta, nije uvijek neophodno da se pravi više paketa ili control flow-ova. Korišćenjem komponente Foreach Loop Container može da se simulira izvršavanje while petlje u programskim jezicima. Primjeri korišćenja mogu da budu prebacivanje podataka iz različitih fajlova u SQL bazu ili obrnuto, arhiviranje podataka neke tabele po različitim kriterijumima i slično.

Dodavanje varijabli

Za prolazak kroz petlju potrebne su nam varijable, jedna koja sadrži kolekciju za koju se petlja izvršava koja je tipa Object i zvaćemo je Loop_Count, kao i varijable za datum i tip u kojima se čuva pokazivač na tekući član tj. za njihove različite vrijednosti prolazimo kroz petlju.

Kreiranje control flow-a

Prvo dodajemo Execution task komponentu u kojoj ćemo definisati skup datuma i tipova za koje će se izvršavati petlja. Izvor može biti sama tabela iz koje se presipaju podaci, a može biti i neka tabela metapodataka. Kreirajmo tabelu metapodataka i napunimo je sa 3 različite vrijednosti.

CREATE TABLE dbo.LoopPodaci
 (Datum INT,
  Tip tinyint,
  ValidInd bit);
GO
INSERT INTO dbo.LoopPodaci (Datum,Tip,ValidInd)
VALUES
	(20140630,1,1),
	(20140731,2,1),
	(20140831,2,1);

U tabeli postoji i kolona ValidInd koja predstavlja indikator koji određuje da li će se slog uzeti u obzir. Na osnovu navedenog, upit za Execution task komponentu je sledeći:

SELECT Datum,Tip
FROM dbo.LoopPodaci
WHERE ValidInd = 1;

Nakon definisanja izvora i podešavanja ResultSet-a na Full result set, potrebno je da se pozicioniramo na Result set granu u drvetu sa lijeve strane i dobijeni rezultat dodijelimo promjenljivoj tipa Object koju smo prethodno kreirali:

Zatim prevučemo komponentu Foreach Loop Container i povežemo sa kreiranom Execution task komponentom. Pozicioniramo se na Foreach Loop Container, desni klik miša i izaberemo opciju Edit. U Collection grani sa lijeve strane za Enumerator izaberemo Foreach ADO Enumerator, pod ADO object source variable izaberemo Loop_Count varijablu i opciju Rows in the first table:

Nakon toga na grani Variable Mappings izaberemo prvo varijablu Datum a potom Tip i one će automatski dobiti Index 0 odnosno 1, respektabilno. Ovdje je bitno obratiti pažnju da redosled izbora varijabli zavisi od redosleda koji je definisan u rezultatu koji je dodijeljen promjenljivoj tipa Object koja im predstavlja izvor, kako bi dodjela bila ispravna:

Ovim smo obezbijedili da kombinacija promjenljivih Datum i Tip dobije onoliko vrijednosti koliko ih ima u izvornom upitu i za njih možemo da definišemo bilo koje akcije u okviru Foreach Loop Container komponente. U našem primjeru kreiran je paket u kome se podaci prebacuju iz jedne tabele u drugu po datumu i tipu i nakon toga se za svaki datum i tip izvrši određena procedura.

U ovom članku nećemo opisivati akcije i način njihovog kreiranja, dovoljno je da znate da je dozvoljeno da koristite sve komponente i operacije koje su inače dozvoljene u control flow-u.