Pytanie Dynamicznie przypisz nazwę pliku, aby uzyskać lepszy ciąg połączenia


Po raz pierwszy bawię się z SSIS w SQL Server 2012. Mogę z powodzeniem odczytać plik Excela i załadować jego zawartość do tabeli na serwerze SQL 2012. Zadaniem jest prosty bezpośredni odczytany plik Excela, a następnie skopiowanie do serwera sql bez sprawdzania poprawności lub transformacja na razie. Zadanie zakończyło się sukcesem. Ale gdy próbowałem sprawić, żeby pakiet odczytał nazwę pliku ze zmiennej zamiast z oryginalnie zakodowanej, generował on błąd "DTS_E_OLEDBERROR Wystąpił błąd OLE DB. Kod błędu: 0x80040E4D"

enter image description here

To, co zrobiłem, to po prostu zastąpienie zakodowanego ciągu znaków połączenia w menedżerze połączeń excel wyrażeniem, które przyjęło wartość zmiennej przypisanej przez wyrażenie

enter image description here

Zmiennej przypisano wartość przed uruchomieniem zadania przepływu danych. Zmienna została sprawdzona i miała poprawną wartość.

enter image description here

Ale błąd poniżej został wygenerowany podczas uruchamiania zadania przepływu danych.

enter image description here

Byłoby bardzo cenne, gdyby ktoś mógł wskazać, co zrobiłem niewłaściwie i doradzić mi, jak rozwiązać problem.


18
2018-02-03 20:09


pochodzenie




Odpowiedzi:


Opcja A

The ConnectionString Właściwość dla Menedżera połączeń programu Excel nie jest tam, gdzie idę, aby manipulować bieżącym plikiem, co jest przeciwieństwem zwykłego Menedżera płaskich połączeń plików.

Zamiast tego umieść wyrażenie w Menedżerze połączeń Excel ExcelFilePath własność.

enter image description here

Teoretycznie nie powinno być żadnej różnicy między ConnectionString a ExcelFilePath, z wyjątkiem tego, że będziesz miał więcej "rzeczy" do zbudowania, aby uzyskać prawidłowy ciąg połączenia.

Upewnij się także, że pakiet jest uruchamiany w trybie 32-bitowym.

Opcja B

Alternatywą, na którą możesz się natknąć, jest to, że wartość czasu projektowania dla ciągu połączenia jest niepoprawna, gdy jest uruchomiona. Kiedy pakiet się zaczyna, sprawdza, czy wszystkie oczekiwane zasoby są dostępne, a jeśli nie, to nie działa szybko, a nie umiera w połowie obciążenia. Możesz opóźnić to sprawdzanie aż do momentu, w którym SSIS będzie musiał uzyskać dostęp do zasobu, a zrobisz to, ustawiając DelayValidation właściwość True. Ta właściwość istnieje we wszystkim w SSIS, ale zacznę od ustawienia jej najpierw w Menedżerze połączeń Excel. Jeśli to nadal powoduje błąd sprawdzania poprawności pakietu, spróbuj również ustawić sprawdzanie opóźnienia przepływu danych na wartość true.


24
2018-02-03 20:19



Dziękuję bardzo za twoje rozwiązanie. Twoja opcja B działa! Zasadniczo ustawienie DelayValiday na true rozwiąże problem! FYI: Twoja opcja nie działa, ponieważ, jak powiedziałeś, ConnectionString ma więcej rzeczy niż tylko sama ścieżka. Jeśli ustawię ExcelFilePath, być może będę musiał wykonać inne manipulacje na łańcuchu połączenia, tak aby sprawić, że zawartość zostanie zapisana w excelfilepath lub nadal będzie hardcoding jak oryginał lub będzie bombardować, jeśli jest puste - user1205746
@ user1205746 - aktualizacja ExcelFilePath automatycznie nadpisuje ścieżkę w łańcuchu połączenia, więc łatwiej jest to zrobić, jak to opisano, niż samemu budować ciąg połączenia. Robiłem to, ale ponieważ mój plik nie istniał, gdy pakiet był uruchomiony (został pobrany jako wcześniejszy krok) wystąpił ten sam problem co ty, ale opcja B go rozwiązała. - davesol
Obie opcje nie działają dla mnie, Tylko w celu weryfikacji, w opcji B, jakie jest właściwe miejsce do ustawienia wartości -realy w wyrażeniu ConnectionString do właściwości "Excel Connection Manager"? Czy format ścieżki powinien być taki sam jak ExcelFilePath, np. "C: \ Projects \ Result Files \ 00000_30-06-2016.xls"? - Stack Overflow
Opcja A działa dla mnie. Dzięki. - CRM Anish
Opcja B z dodanymi informacjami o ustawieniu jej również w przepływie danych. Pojemnik sekwencji w moim przypadku. - frostymarvelous


Miałem sporo czasu próbując uruchomić to zadanie, nawet po wykonaniu wszystkich instrukcji, więc zachowałem go ze statyczną nazwą programu Excel i dodałem "File System Task", aby skopiować plik i utworzyć nowy plik z dowolnym imię, którego potrzebuję.


0
2017-07-10 23:28