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=1
i typeguessrow=0
nic 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.
źródło
Odpowiedzi:
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.
źródło
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.
źródło
Krok 1: Dodaj
IMEX=1; MAXROWSTOSCAN=0
ciąg połączeń (npProvider=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.
źródło