Artykuły

A A A
Drukuj Ekportuj do PDF
Opublikowane: 2010.09.08 9:29 | Cezary Ołtuszyk

[Porada] Jak poradzić sobie z nieodpowiednim mapowaniem typu kolumny w SSIS podczas importu plików XLS?

Jak poradzić sobie z nieodpowiednim mapowaniem typu kolumny w SSIS podczas importu plików XLS?

SQL Server posiada usługi integracyjne (SSIS), które służą między innymi do importu danych. Jednym z możliwych źródeł takiego importu może być plik Excela.


W momencie gdy kreujemy paczkę importową za pomocą BIDS i serwer podłącza się do wybranego pliku to zostają zamapowane typy kolumn.


Ponieważ wyboru typów jest używanych pierwszych osiem wierszy pliku XLS i odpowiada za to sterownik Excela, to nie możemy tych typów zmienić na inne, bardziej odpowiednie.


Problem ten jest o tyle dotkliwy, że podczas importu SSIS nie zwraca błędu, a wszystkie niepasujące wartości są zaimportowane jako NULL.


Przykład tego typu problemu można znaleźć pod adresem:
http://support.microsoft.com/kb/236605

Pierwszym możliwym obejściem tego jest zmiana wartości TypeGuessRows w następującej gałęzi rejestru:
HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
na liczbę większą od 8 lub równą zeru (dla zera przy wyborze kolumny będą brane pod uwagę wszystkie wiersze).

Drugą możliwością jest edycja paczki SSIS poprzez Business Inteligence Development Studio oraz zmiana właściwości ConnectionString dla ExcelConnectionManager, a dokładniej dodanie wpisu: IMEX=1 w sekcji Extended Properties.

Przykład zmienionego Conncction String-a podaje poniżej:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Documents and Settings\Czarek\Moje dokumenty\ImportHEX.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";


Wpis ten mówi Excelowi aby w przypadku gdy w danej kolumnie występują wartości nvarchar, to cała  kolumna ma przyjąć ten typ. 
Po zmianie tego wpisu niestety trzeba będzie na nowo utworzyć Excel Source, gdyż to w nim jest zawarta definicja kolumn.

Czasem zastosować oba podejścia na raz, gdyż w przypadku zmiany TypeGuessRows Excel nie zawsze rzutuje odpowiednio typy. Gdy natomiast zmienimy tylko IMEX to istnieje możliwość, że  wartości w pierwszych ośmiu wierszach będą typu integer, a w kolejnych typu varchar. Ponieważ Do wybrania typu kolumny będą brane tylko te pierwsze - opcja IMEX nie będzie miała szansy zadziałać.


Komentarze 0 Masz uwagi do tej strony? Napisz

Dodaj komentarz

avatar

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Autor Cezary Ołtuszyk
avatar
 

Moim ulubionym tematem są relacyjne bazy danych danych, a w szczególności SQL Server. Pracuję głównie jako administrator baz danych lub/i programista. Do moich codziennych obowiązków można zaliczyć projektowanie, utrzymanie oraz optymalizację infrastruktury bazodanowej. Swoją wiedzę w tym temacie potwierdziłem zdając serię egzaminów MCITP i MCTS z SQL Server 2008 i 2005. W wolnych chwilach prowadzę bloga coltuszyk.wordpress.com

Załóż konto
WSS to serwis, który łączy dziesiątki tysięcy specjalistów IT w Polsce, zajmujących się szeroko pojętymi technologiami Microsoft. Portal działa od 2003 roku, i oprócz setek publikacji technicznych, rozwijającego się forum - portal to ludzie, którzy go tworzą. To właśnie z myślą o nich warto codziennie nas odwiedzać.

Dowiedz się więcej o WSS

vGuru - Zostań Guru Wirtualizacji

 

MetroOne

Idź na górę strony