SSIS: Pętla ForEach po plikach z wyodrębnieniem skróconej nazwy pliku (bez ścieżki) – krok po kroku z obrazkami

1-Paź-2012

Problem: Task z SSIS iterując przez pliki, zapisuje w zmiennej związanej z tą iteracją pełną ścieżkę pliku. Niekiedy potrzebna jest tylko nazwa skrócona. Oto jak otrzymać samą nazwę pliku (bez ścieżki):

1. Umieść w designerze ForEachLoop Container, a w nim Script Task. Zmień nazwy tasków, jeśli chcesz:

2. Ustaw w odpowiedni sposób właściwości kontenera ForEach. U mnie chodziło o iterację po plikach z rozszerzeniem TXT znajdujących sie w katalogu c:\temp. Zauważ, że już na tym etapie wystarczyłoby wskazać, że interesuje cię wyłącznie nawa pliku bez ścieżki dostępu. Wystarczyłoby wtedy wybrać „Retrieve file name” na „Name and extension” lub „Name only”, zakładam jednak, że chcesz zobaczyć i pełną ścieżkę dostępu do pliku i skróconą.

3. Zdefiniuj zmienną, w której będzie przechowywana nazwa pliku, a właściwie pełna ścieżka dostępu do niego. W tym celu przejdź na Variable Mappings i stwórz nową zmienną:

4. Korzystając z okienka Variables (View >> Other Windows >> Variables) dodaj zmienną, która będzie służyła do przechowywania samej nazwy pliku (bez ścieżki):

5. Zaraz zdefiniujesz wyrażenie, które ze ścieżki pliku „wytnie” jego nazwę. Nim to jednak nastąpi zdefiuniuj jakąś (dowolną) ścieżkę w zmiennej CurrentFileName. Podczas definiowania wyrażenia SSIS próbuje sprawdzić, czy w wyrażeniu nie ma błędu i nie wypuści cię z okienka definiowania wyrażenia dopóki wprowadzona wartość nie będzie poprawna. Podświetl pozycję ze zmienną FileAndExtension i przejdź do okienka właściwości (properties). Jeśli nie widać tego okienka naciśnij F4. Zmień w nim właściwość EvaluateAsExpresion na True. Oznacza to, że wartość przechowywana w tej zmiennej ma się sktualizować w oparciu o wyrażenie, które zaraz zdefinujesz:

6. Kliknij teraz na […] w polu Expression. Wyrażenie, które widzisz poniżej wycina ze ścieżki pliku patrząc od końca znaki aż do najbliższego znaku backslash:

7. Od tej pory zmienna FileAndExtension będzie przechowywać nazwę pliku bez ścieżki. Pozostała część służy wyłącznie udowodnieniu tego. Wróć więc do script task. Wejdź w jego edycję i wskaż, że obie zdefiniowane tu zmienne mają być przekazane do skryptu, jako parametry na odczyt:

8. Teraz kliknij Edit Script… i uzupełnij metodę Main tak, aby wyświetlała wartości obu parametrów poprzez MessageBox:

9. Na zakończenie uruchom swój pakiet. W moim przypadku wyświetlały sie takie okienka dialogowe:

Dziękuję za pomoc innym bloggerom:

http://beyondrelational.com/modules/2/blogs/106/posts/11125/ssis-expression-to-get-file-name-from-file-path.aspx

Dodaj komentarz:

Autor: Rafał Kraik