Tworzę pakiet, w którym będę eksportować dane z bazy danych do pustego pliku programu Excel. Kiedy dodałem tylko komponenty źródłowy i docelowy i uruchomiłem pakiet, wystąpił błąd konwersji informujący, że kolumna wyjściowa i kolumna „A” nie mogą konwertować między typami danych unicode i nie-Unicode.
Aby to naprawić, dodałem komponent konwersji danych i przekonwertowałem wszystkie kolumny
„Ciąg Unicode [DT_WSTR]”
i nie otrzymałem już błędu. Jedynym problemem jest to, że miałem około 50 kolumn, w których musiałem iść 1 na 1 i wybrać „Unicode String [DT_WSTR]” z rozwijanej listy. Następnie musiałem przejść do komponentu docelowego i zamapować nowo przekonwertowane kolumny na mój plik Excel.
Moje pytanie brzmi: czy ktokolwiek zetknął się z tym, czy istnieje lepszy i bardziej skuteczny sposób na obejście wszystkich ręcznych konwersji typów danych? Konwertowanie i mapowanie wszystkich kolumn jeden po drugim nie wydaje się praktyczne, zwłaszcza jeśli masz dużą liczbę wierszy.
Rozumiem, że pliki Excela nie są najlepszym sposobem na importowanie i eksportowanie danych, ale jest to wymagane w tym konkretnym przypadku.
Mogę poszukać sposobu na wyeksportowanie do płaskiego pliku tekstowego, a następnie spróbować przekonwertować go do programu Excel jako ostatni krok w pakiecie. Mam nadzieję, że to nie spowoduje tego samego błędu konwersji unicode / nonunicode.
źródło
Odpowiedzi:
Jako alternatywę dla RDC po prostu pominąłem konwersję typów danych w SSIS i jawnie przekazałem je jako nvarchar w moim zapytaniu źródłowym.
Stosowanie
W zapytaniu źródłowym (i są przy użyciu kwerendy źródłowej a nie po prostu wybierając tabelę w dół doliny), wyraźnie rzucać rzeczy do odpowiedniego n (VAR) długości char.
Zamiast
użyj zapytania takiego jak
Sprytni studenci AdventureWorks rozpoznają, że dane były już
n(var)char
typem, ale miało to jedynie na celu zademonstrowanie tej koncepcji.Korzyści
Data Conversion Component
odbywa się za pomocą SSISźródło
CONVERT
powinno być łatwiej wkleić 50 razy niżCAST
, ponieważ argumenty są przed sobąNatywnie nie da się tego zrobić. Ale możesz pobrać - Zastąpienie komponentu konwersji danych dla SSIS z Codeplex i zrób to za jednym razem.
Więcej informacji można znaleźć tutaj .
źródło
Jeśli musisz zmienić tylko „Ciąg Unicode (DT_WSTR)” na „Ciąg (DT_STR)” lub odwrotnie, możesz to zrobić:
Wyszukaj ciąg,
DTS:DataType
jeśli następuje po nim = „130”, a następnie Kolumna jest zdefiniowana jako DT_WSTR (Unicode).Jeśli po niej następuje = "129", to Kolumna jest zdefiniowana jako DT_STR (nie-Unicode), użyj wyszukiwania i zamień ostrożnie (wcześniej zrobiłeś kopię, prawda?)
Zapisz plik i być może to było to.
źródło