2013-03-21 10 views
23

Mam pakiet ssis, w którym używam źródła OLEDB łączącego się z tabelą SQL Server 2005. Wszystkie kolumny z wyjątkiem kolumny daty to NVARCHAR (255). Używam miejsca docelowego programu Excel i za pomocą instrukcji SQL do utworzenia arkusza w skoroszycie programu Excel, SQL jest w menedżerze połączeń excel (skutecznie utworzyć instrukcję tabela, która tworzy arkusz) i pochodzi z odwzorowania kolumn z DB.Konwersja SSIS między błędem Unicode i Non-Unicode

Niezależnie od tego, co zrobiłem, ciągle otrzymuję ten błąd konwersji Unicode -> non-unicode między moim źródłem a miejscem docelowym. Próbowałem konwersji na ciąg [DT_STR] między S> D, usunąłem go, zmieniłem tabelę SQL VARCHAR na NVARCHAR i nadal otrzymuję ten błąd flippin.

Ponieważ tworzenie arkusza w programie Excel za pomocą instrukcji SQL nie widzę żadnego sposobu, aby faktycznie wstępnie zdefiniować, jakie typy danych kolumn będą w arkuszu Excel. Wyobrażam sobie, że to domyślne dane meta, ale nie wiem.

Tak więc między moim miejscem docelowym w tabeli SQL a utworzeniem mojego arkusza Excel z tą instrukcją SSIS sql, jak mogę zatrzymać ten błąd?

Mój błąd jest:

Błąd na przepływ danych zadania [OLE DB źródła [1]]: Kolumna "MyColumn" nie może konwersji pomiędzy typami danych ciąg Unicode i non-Unicode.

I dla wszystkich kolumn nvarchar.

wdzięczni za każdą pomoc

Dzięki

Andrew

+5

trzeba użyć 'danych Conversion' przekonwertować' non-unicode' do 'unicode' ponieważ Excel rozpoznaje tylko' dane unicode' – praveen

+0

usunięta część konwersji pakietu SSIS, usunięte cel i excel połączenie, w tym usunięcie arkusza utworzonego przez SQL w skoroszycie i rozpoczęte ponownie. teraz ładuje się ok z erosami – Andrew

+0

Jak już powiedziałem, usunięcie konwersji zadziałało teraz. Z tego co rozumiem, typ kolumny danych SQL to NVARCHAR typu unicode, więc nie będzie potrzeby konwersji. – Andrew

Odpowiedz

42

Dodaj transformacje konwersji danych do konwersji kolumny ciągów z non-Unicode (DT_STR) do Unicode (DT_WSTR) strun.

Trzeba to zrobić dla wszystkich kolumn ciąg ...

+17

Działa, ale do odpowiedzi należy dołączyć ostrzeżenie/wyłączenie "tunelu nadgarstka". –

+2

Biml byłby przydatny w tym przypadku @ pokerplayer23 – gazma

10
  1. Najpierw dodaj blok konwersji danych do diagramu przepływu danych.

  2. Otwórz blok konwersji danych i zaznacz kolumnę, dla której wyświetla się błąd. Poniżej zmień jego typ danych na ciąg znaków Unicode (DT_WSTR) lub jakikolwiek typ danych jest oczekiwany i zapisz.

  3. Przejdź do bloku docelowego. Przejdź do mapowania w nim i zamapuj nowo utworzony element na odpowiadający mu adres i zapisz.

  4. Kliknij prawym przyciskiem myszy swój projekt w właściwości explorer.select rozwiązania. Wybierz właściwości konfiguracji i wybierz w niej debugowanie. W tym ustaw opcję Run64BitRunTime na false (ponieważ Excel nie obsługuje dobrze aplikacji 64-bitowej).

16

poniższe kroki pracował dla mnie:

1). kliknij prawym przyciskiem myszy zadanie źródłowe.

2). kliknij "Pokaż Zaawansowany edytor". advanced edit option for source task in ssis

3).Przejdź do zakładki "Właściwości wejściowe i wyjściowe".

4). wybierz kolumnę wyjściową, dla której pojawia się błąd.

5). Jego typem danych będzie "String [DT_STR]".

6). Zmień ten typ danych na "Ciąg Unicode [DT_WSTR]". Changing the data type to unicode string

7). Zapisz i zamknij. Mam nadzieję, że to pomoże!

1

W powyższym przykładzie ciągle traciłem wartości, myślę, że opóźnienie walidacji pozwoli na zapisanie nowych typów danych jako części danych meta.

W Menedżerze połączeń dla "Menedżera połączeń programu Excel" ustaw walidację opóźnienia na wartość False z poziomu właściwości.

Następnie w przepływie danych Zadanie przeznaczenia dla programu Excel ustawia wartość ValidationExternalMetaData na wartość False, ponownie z właściwości.

To pozwoli teraz kliknąć prawym przyciskiem myszy na zadanie docelowe Excel i przejść do edytora zaawansowanego dla Excela -> Prawy zakładka - Właściwości wejścia i wyjścia. W sekcji folderu Kolumny zewnętrzne będzie można teraz zmienić wartości Typów danych i Długość kolumn problematycznych i teraz można je zapisać.

Powodzenia!

0

Mam ten sam problem i wypróbowałem wszystko napisane tutaj, ale wciąż dawało mi ten sam błąd. Okazało się NULL wartość w kolumnie, którą próbowałem przekonwertować.

Usunięcie wartości NULL rozwiązało mój problem.

Cheers, Ahmed

0

Doświadczyłem tego warunku, gdy miałem zainstalowana wersja Oracle 12 klient 32 bitowego klienta podłączonego do serwera Oracle 12 w systemie Windows. Chociaż oba źródła danych Oracle i SqlServer NIE są standardem Unicode, ciągle otrzymywałem tę wiadomość, tak jakby kolumny oracle były w Unicode. Rozwiązałem problem wstawiając skrzynkę konwersji danych i wybierając typ DT-STR (nie unicode) dla pól varchar2 i DT-WSTR (unicode) dla pól numerycznych, a następnie usunąłem "KOPIUJ" z pola wynikowego Nazwa. Zauważ, że ciągle pojawiał się błąd, ponieważ podłączyłem strzałkę ze źródłem w polu konwersji PRZED ustawieniem typów konwersji. Musiałem więc zmienić skrzynkę źródłową i to wyczyściło wszystkie błędy w docelowym polu.

0

Zamiast dodawać wcześniej sugerowaną Data Conversion można rzucić kolumnę nvarchar do kolumny varchar. Zapobiega to niepotrzebnemu krokowi i ma wyższą wydajność niż alternatywa.

W wyborze instrukcji SQL zamień date na CAST(date AS varchar([size])). Z jakiegoś powodu nie zmienia to jeszcze wyjściowego typu danych. Aby to zrobić, wykonaj następujące czynności:

  1. prawym przyciskiem myszy OLE DB źródłowy krok i otworzyć zaawansowanego edytora.
  2. przejdź do właściwości wejściowych i wyjściowych
  3. Wybierz kolumny wyjścia
  4. Wybierz kolumnę
  5. Pod danych Właściwości typu zmiany DataType ciąg [DT_STR]
  6. Zmień długość do długości określonej w swojej CAST oświadczenie

Po wykonaniu tych czynności twoje dane źródłowe zostaną wyprowadzone jako varchar, a Twój błąd zniknie.

Source

0

brakujące ogniwo tutaj jest Data Conversion przedmiot. Powinien znajdować się pomiędzy obiektem źródłowym i docelowym OLE DB.

enter image description here