SSIS utrzymuje zmienną siłę źródła łańcucha Excela na zmienną wartość

9

W Excelu jest kolumna, która powinna być tekstem, ale SSIS widzi tam tekst numeryczny i automatycznie czyni go zmiennoprzecinkowym podwójnej precyzji [DT_R8].

Mogę to zmienić ręcznie w kolumnach Zewnętrzne i Wyjściowe gałęzi Wyjście, ale Wyjście błędu po prostu nie pozwala mi zmienić odpowiedniej kolumny.

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

Próbowałem zmodyfikować pakiet xml. Próbowałem IMEX=1i typeguessrow=0nic z tego nie rozwiązało mojego problemu. Czy to w ogóle ma jakieś rozwiązanie? Istnieją również artykuły sugerujące modyfikację rejestru, aby program Excel odczytywał więcej niż domyślne 8 wierszy przed odgadnięciem typu danych. Nie chcę iść tą drogą, ponieważ nawet gdyby zadziałała, musiałbym zmodyfikować rejestr na komputerze, na którym planuję uruchomić pakiet.

Na przykład pole excela, które ma zostać zaimportowane do pola nvarchar SQL

295.3
296.33

ale są zapisywane do tabeli SQL jako

295.30000000000001
296.32999999999998

Włączyłem przeglądarki danych i pola pokazują

295.3
296.33

przez całą drogę przez wykonanie, które jest poprawne, ale myślę, że kiedy trafi do źródła docelowego OLE DB, w jakiś sposób konwertuje je na

295.30000000000001
296.32999999999998

co jest złe.

Mam także wartości, takie jak na przykład V321.1 i V213.34, które zdecydowanie nie są liczbami całkowitymi i muszą być przechowywane jako varchar.

Juan Velez
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Paul White 9

Odpowiedzi:

2

Czy można uzyskać plik w formacie .csv, który można zaimportować jak plik tekstowy i nie będzie miał tego problemu? Generalnie odbieram wszystkie pliki Excela i proszę o inny format, ponieważ SSIS i Excel nie działają dobrze na wielu poziomach.

HLGEM
źródło
1
Mam nadzieję, że zmiana w pliku .csv lub txt nastąpi w najbliższej przyszłości. znacznie ułatwi sprawy.
Juan Velez
2

Wygląda na to, że nie ma sposobu na rozwiązanie tego problemu. Excel patrzy na kilka pierwszych wierszy danych w kolumnie i zawsze WYMUSZA typ danych do FLOAT bez względu na wszystko. Dostałem rozwiązanie polegające na utworzeniu szablonu zawierającego kilka znaków varchar w pierwszych kilku wierszach (8+), aby EXCEL wybrał to jako typ danych, a następnie zaimportował moje dane. Pomogło mi to, ponieważ korzystam z Bezpiecznego źródła, jestem w stanie „Zaewidencjonować” plik, dzięki czemu mój plik pakietu staje się „Tylko do odczytu”, dzięki czemu Visual Studio nie może zmienić wcześniej zdefiniowanych typów danych.

Juan Velez
źródło
1

Krok 1: Dodaj IMEX=1; MAXROWSTOSCAN=0ciąg połączeń (np Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0".).

Krok 2: Zamknij rozwiązanie. Otwórz pakiet SSIS w edytorze tekstu, znajdź kolumny, które ciągle wracały do ​​wstępnie zdefiniowanego typu danych. Zaktualizuj go ręcznie w pliku XML do żądanego formatu.

Krok 3: Otwórz pakiet w narzędziu SQL Server Data Tool i uruchom go, teraz powinieneś być w stanie załadować dane z pliku.

użytkownik1968485
źródło
Przepraszamy, ale źródłowy typ danych nie znajduje się w pakiecie. Tylko typy kolumn docelowych. Powoduje to ponowne pokonanie celu, ponieważ konwersja nadal odbywa się po stronie sterownika Microsoft.Ace (lub innego wybranego sterownika), a utrata danych już się zdarzyła, zanim dostał się do SSIS i tabeli docelowej.
Reversed