neljapäev, 15. mai 2008

SSIS Locale ID hädad Flat faili eksportimisel

Ehk tõmbame SQLSERVER 2005 andmebaasist salvestatud protseduuriga andmeid välja ja tahame tulemust panda tekstifaili
aga pillub siis sellist:

1. The Locale ID is not installed on this system
2. The component locale ID does not match the connection manager Locale ID

Põhjus selline, et Data Flow Taskis on Ole DB Source -> Properties LocaleID näiteks Estonian aga Flat faili Locale ID on näiteks English(United States) ja nüüd SSIS üritab andmeid tõmmata
Estonian -> English(United States) peale aga see talle kohe kuidagi ei meeldi.

Flat failil tuleb LocaleID panna sama, mis on Ole DB Source. Lihtsalt sellega, et muuda Flat file properties alt LocaleId ära ei pruugi õnnestuda. Kustuta olemasoleva Flat File connection ära ja Data Flow pealt ka minema ning lohista uus Flat file destination Data Flow peale. Ühenda OLE DB Sourcega ning loo Flat fail uuesti

Punkt 1 vastu rohtu ei ole otsinud, muud kui säti igal pool Locale ID English(United States), see on alati olemas.

Ahaa, andmebaasi SP-s, kui kasutad tabelmuutujat ja mingit fikseeritud tekstikonstanti siis ära unusta COLLATION DATABASE_DEFAULT kasutamast.

Näiteks kui SP-s salvestad midagi alguses tabelmuutujasse ja siis sealt pärast loed edasi näiteks:

DECLARE @paat TABLE ( nimi NVARCHAR(200) COLLATE DATABASE_DEFAULT, nr INT)
INSERT INTO @paat (nimi, nr) SELECT midagi, number FROM DBO.TABEL
ja kui nüüd sellest @paat tabelist edasi midagi loed näiteks:

SELECT nimi, CASE WHEN nr = 1 THE 'JAH' ELSE 'EI' END AS kuidas FROM @paat
siis "nimi" tuleb andmebaasi järjestuses (COLLATION) "kuidas" aga võetakse serveri oma ja
see SSIS-ile ka ei pruugi meeldida, tuleb seega järjestus ära määrata


SELECT nimi, CASE WHEN nr = 1 THE 'JAH' COLLATE DATABASE_DEFAULT ELSE 'EI' COLLATE DATABASE_DEFAULT END AS kuidas FROM @paat

Võid ühest hädast jälle lahti saada



Blogged with the Flock Browser