Zacznę od wyjaśnienia, że nie jest to duplikat pytania ani potencjalny duplikat w tym zakresie. Próbowałem zaimplementować każdą odpowiedź na każdy wariant, który już istnieje w tym problemie na StackOverflow i DBA Stack Exchange, bez powodzenia.
Walczyłem z tym problemem przez ostatnie dwa dni (pracowałem nad nim przez około 7 godzin dziennie), a nawet po Googlingu wydaje się, że nikt inny nie ma dokładnie tego samego wariantu mojego problemu.
Co ja próbuję zrobić
W SSIS próbuję odczytać z pliku CSV i wstawić z niego wiersze do bazy danych OLE DB. W tym celu stworzyłem najprostszą konfigurację, jak pokazano poniżej.
Flat File Source
- czyta wiersze CSV.Derived Column
- obecnie nic nie robi (służy tylko do eksperymentowania).Data Conversion
- obecnie nic nie robi (służy tylko do eksperymentowania).OLE DB Destination
- przechowuje wiersze w bazie danych.
Gdy próbuję go uruchomić, przestaje on działać w miejscu docelowym OLE DB z następującym komunikatem o błędzie.
Wystąpił błąd z kolumną wejściową „Kwota” (187) na wejściu „Wejście docelowe OLE DB” (51). Zwrócony status kolumny to: „Nie można przekonwertować wartości z powodu potencjalnej utraty danych.”.
Kolumna fail ( Amount
) jest obecnie typu DT_STR
. Wydaje się, że jest to typ, w który teraz najbardziej wierzę.
Co próbowałem?
- Próbowałem użyć funkcji
Flat File Connection
„Zaproponuj typy” w kolumnie, która nie działa. To sprawiło, że poleciłSingle byte signed int
typ danych.- Zatrzymuje się w moim źródle plików płaskich .
- Błąd polega na tym, że konwersja danych nie powiodła się. Konwersja danych dla kolumny „Kwota” zwróciła wartość stanu 2 i tekst statusu „Wartości nie można przekonwertować z powodu potencjalnej utraty danych.”.
- Próbowałem użyć
Derived Column
do rzutowania kolumny naDT_I4
.- Zatrzymuje się w mojej kolumnie pochodnej .
- Błąd polega na tym, że konwersja danych nie powiodła się. Konwersja danych dla kolumny „Kwota” zwróciła wartość stanu 2 i tekst statusu „Wartości nie można przekonwertować z powodu potencjalnej utraty danych.”.
- Próbowałem użyć
Data Conversion
do rzutowania wartości mojej kolumny na aDT_I4
.- Zatrzymuje się na moim
Data Conversion
. - Błąd polega na tym, że konwersja danych nie powiodła się. Konwersja danych dla kolumny „Kwota” zwróciła wartość stanu 2 i tekst statusu „Wartości nie można przekonwertować z powodu potencjalnej utraty danych.”.
- Zatrzymuje się na moim
- Próbowałem zmienić długość mojej
DT_STR
wartości w źródle i miejscu docelowym.- Zatrzymuje się na źródle lub miejscu docelowym w zależności od ustawień.
- Próbowałem połączyć się za pomocą łącznika źródłowego Excel zamiast z dodanym ciągiem połączenia i bez niego
IMEX=1
. Brak szczęścia.
Mój zmysł programistyczny mówi mi, że jestem wkręcony. Nigdy nie spotkałem tak dużego problemu z tak prostą rzeczą.
I dlaczego nie mogę po prostu zignorować „potencjalnej” utraty danych? To naprawdę frustrujące co najmniej.
Mój system
Jest to komputer z systemem Windows Server 2008 R2 z zainstalowanym programem SQL Server 2008. Samo urządzenie jest w pełni aktualizowane za pośrednictwem Windows Update.
źródło
Amount
?Amount
kolumnę. Zrób zrzut ekranu i zaktualizuj swoje pytanie o to zdjęcie.Odpowiedzi:
Natknąłem się na to kilka razy i problemem było niedopasowanie typów danych w parametrach eksportu / importu. Najpierw sprawdź te parametry, klikając prawym przyciskiem myszy źródło lub miejsce docelowe, wybierając Advanced Editor. Przejdź do Właściwości wejścia i wyjścia i sprawdź typ danych dla tej kolumny dla wszystkich elementów - zarówno Zewnętrznych, Wyjściowych, jak i Wejściowych. Zazwyczaj widziałem tutaj wariancję, często jeden z nich to Unicode (WSTR), a drugi I4 lub DSTR.
źródło
Ignorowanie błędu
Przede wszystkim powinieneś być w stanie zignorować obcięcie łańcucha, przechodząc do źródła pliku płaskiego, wyjścia błędu, a następnie zmieniając „Komponent awarii” w „Truncation” na „Ignoruj błąd”.
Lepsze rozwiązanie
Prawdziwym problemem może być to, że długość ciągu wewnątrz potoku SSIS jest nadal niepoprawna, ponieważ została zainicjowana w pewnym wcześniejszym momencie.
Możesz ustalić, czy tak jest, klikając dwukrotnie zieloną strzałkę ze źródła pliku płaskiego (lub po konwersji kolumny pochodnej / danych) i wybierając „Metadane”. Tam możesz zobaczyć długość pola wewnątrz rurociągu.
Jeśli często widziałem, że metadane nie są już zgodne ze składnikiem źródłowym, głównie w przypadku tworzenia płaskiego źródła pliku ORAZ jego odpowiedniego połączenia za pomocą kreatora.
Moją sugestią byłoby usunięcie połączenia i Flat File Source i odtworzenie ich, ponieważ nie znalazłem sposobu na ponowne sychronizowanie meta-danych potoku za pomocą komponentów źródłowych.
źródło