2017-02-21 82 views
6

Mam kwerendy SQL, który to jest wykonywane w SSIS do ładowania danych do pliku CSV, który wygląda mniej więcej tak:Czy mogę ustawić zmienne w SSIS dla pętli na podstawie zapytania?

SELECT * 
FROM SomeTable 
WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016' 
     AND Param1 = 2 AND Param2 = 2 

Kiedy to zostało napisane w QlikView, użyłem parametry tak:

SELECT * 
FROM SomeTable 
WHERE SomeDate BETWEEN '1-Jan-2016' AND '31-Dec-2016' 
     AND Param1 = $(Param1) AND Param2 = $(Param2) 

Teraz, gdy migruję całe zadanie do SSIS, zastanawiam się, jak je uzyskać, aby Param1 i Param2 były dynamicznie przypisywane. Na przykład w QlikView utworzyłem tabelę zapełnioną przez inne zapytanie:

SELECT Param1, Param2 
FROM ThisTable 
WHERE SomeID = 1 

Coś w tym stylu. Wybór Param1 i Param2 z tego zapytania dostarcza mi niezbędnych wartości dla $(Param1) i $(Param2) w moim kodzie QlikView.

Właśnie próbuję przekonwertować kod QlikView na pakiet SSIS, ponieważ SSIS jest dedykowanym narzędziem ETL, a QlikView nie. Czy to, co robię, jest możliwe? A jeśli tak, to jak mam to zrobić?

Mój pomysł był zawinąć to wszystko w pętli do kontenera i mieć go zatrzymać po tym łapie ostatni Param1 i Param2 od tego zapytania:

SELECT Param1, Param2 
FROM ThisTable 
WHERE SomeID = 1 

Zasadniczo, staram się uniknąć konieczności pisania moje pierwsze oświadczenie wyboru tysiąc razy.

Dziękuję.

Jeśli to, co mówię, nie ma sensu, proszę dać mi znać, żebym mógł trochę więcej rozwinąć.

Odpowiedz

7

Podejrzewam, że wykonujesz zadanie SQL, dlatego możesz po prostu odwzorować parametry w komponencie zadań SQL.

Co musisz zrobić, to najpierw utworzyć komponent SQL, który wykonuje to zapytanie:

SELECT Param1, Param2 
FROM ThisTable 
WHERE SomeID = 1; 

byłem wyśmiewany SQLStatement, ale wszystko powinno wyglądać tak (nie zapomnij sprawdzić, czy ma pełny zestaw danych): enter image description here

następnie umieścić zestaw wyników do zmiennej obiektu (tylko upewnij się, aby wynik Nazwa jako 0): enter image description here

teraz w aby uruchomić następujące zapytanie dla każdej wartości, zebrane powyżej, możemy użyć pętli foreach i iterować nasz zbiór danych. W tej pętli foreach wprowadzimy zadanie przepływu danych, w którym będziesz używać OLE DB jako źródłowego i płaskiego pliku jako miejsca docelowego, aby odczytać dane i umieścić je w plikach CSV. (W prawdziwym projekcie radzę użyć ODBC zamiast OLE DB, jest to szybsze).

właściwości

Loop: enter image description here

zmienne Przydzielanie w pętli foreach: enter image description here

Teraz w zadania przepływu danych utworzyć źródło danych, dodaj zapytanie i parametryzacji to tak: enter image description here enter image description here

W końcu powinno to wyglądać jakoś tak (podświetlone na czerwono wewnętrzne komponenty Zadania przepływu danych): enter image description here

Oczywiście musisz dodać rejestrację lub inne komponenty, ale to jest podstawowe i sprawi, że będziesz się ruszać.

+0

jestem rzeczywiście przy przepływie danych Zadanie zawierające źródło OLE DB -> Plik docelowy z. Czy twoja metoda pozwala mi zapisać zestaw wyników do pliku CSV? – Leon

+0

Tak, to prawda. Zmienię moją odpowiedź na bardziej szczegółową –

+0

@Leon updated. Mam nadzieję, że teraz jest bardziej szczegółowy :) –

0

Możesz także na co zwrócić do narzędzi SSIS „pętli pojemnik” i "Foreach Loop

można wypełnić obiekt typ parametru z listy wartości. - w moim przypadku użyłem zapytanie w SQL zadanie [Lookup brakuje zleceń], a następnie przycisk [Foreach Zamówienie Loop] zadanie przechodzi każdego wpisu w parametrze i wykonuje [Ładuj brakuje Zamawiam] zadanie przepływu danych.

enter image description here