Avatar billede lllund Nybegynder
22. februar 2012 - 14:34 Der er 7 kommentarer og
1 løsning

Bulk insert fejler

Hej

Jeg kører dagligt et sql script der skal læse en delta fil ind.

Jeg har det problem at jeg får en fejl da der er en "blank" linje til sidst i filen
filen har ikke samme antal emner fra dag til dag.

DECLARE @sql AS VARCHAR(4000)
SET @sql = 'BULK INSERT Data.dbo.Temp_indlaest FROM ''G:\SQLData\DELTA.csv'' WITH (CODEPAGE=''1252'', FIELDTERMINATOR=''|'', ROWTERMINATOR=''' + CHAR(10) + ''')'
PRINT @sql
EXECUTE (@sql)

den fejl jeg får nu er :

Server: Msg 4832, Level 16, State 1, Line 1
Bulk Insert: Unexpected end-of-file (EOF) encountered in data file.
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'STREAM' reported an error. The provider did not give any information about the error.
OLE DB error trace [OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005:  The provider did not give any information about the error.].
The statement has been terminated.


Min plan er at lave det så jeg bruger Lastraw' (antal emner -1) '
men jeg ved ikke lige hvordan jeg skal få det til at fungere i praksis.

Håber nogle kan hjælpe :)
Avatar billede lllund Nybegynder
22. februar 2012 - 14:41 #1
lige et tillæg:

hvis jeg sletter den tomme linje fejler importen ikke, men det vil jeg jo helst udenom at skulle gøre dagligt, jeg har desværre ikke mulighed for at få leveret filen uden denne tomme linje i bunden :/
Avatar billede NCG Novice
23. februar 2012 - 10:40 #2
Kan du virkelig ikke få dit input leveret i et fornuftigt format?

Byg evt. selv et script (eller google et) der kan fjerne de ekstra linier fra filen. Så kan du bruge det før du laver bulk insert.
Avatar billede lllund Nybegynder
23. februar 2012 - 10:46 #3
Jeg har desværre ikke mulighed for at få fjernet den sidste linje, har forsøgt :)

Men det undre mig bare at jeg ikke kan finde svar på det, kan se der er mange posts rundt om hvor folk har samme problem.
Avatar billede NCG Novice
23. februar 2012 - 11:06 #4
Nu er jeg så heldig at kunne importere filer via min Biztalk server, så den laver alt det beskidte arbejde for mig.

Men du må kunne lave et script som:
1. Drop temp tabel
2. Opret temp tabel med 1 nvarchar(max) kolonne
3. Bulk Insert alle records i temp tabel
4. Slet alle poster som er "tomme" eller NULL fra temp tabel
5. Eksporter temp tabel til ny fil
6. Bulk Insert fra ny fil
Avatar billede lllund Nybegynder
23. februar 2012 - 12:46 #5
Det er ikke helt det jeg er ude efter, det ser ud til jeg egentligt bare skal have slettet det sidste felt i filen altså det sidste [LF].

Jeg har prøvet med LASTROW og når jeg tester med en fast værdi får jeg samme fejl.
Avatar billede NCG Novice
23. februar 2012 - 16:07 #6
Er det et ekstra LF eller en linie med blanke som du har til sidst?

Hvis det blot er ekstra LF, så kan du benytte en FORMATFILE
=> http://msdn.microsoft.com/en-us/library/ms191479.aspx
Avatar billede lllund Nybegynder
24. februar 2012 - 14:39 #7
Når så fandt jeg problemet.

Jeg havde ikke fået droppet Rawline til sidst i tabellen, hvor jeg normalt opbygger en streng med hele linjen.
Her blev hele den næste linje læst ind.

problemet var så bare at den kun læste halvdelen af filen ind, og stoppede halvvejs (problemer med EOF)

Altså fik jeg kun læst hver 2. linje ordentligt ind.

ellers tak for input.
Avatar billede lllund Nybegynder
08. marts 2012 - 07:43 #8
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester