2012-08-27 11 views
16

Provo a caricare il mio database con tonnellate di dati da un file .csv da 1,4 GB. Ma quando provo a eseguire il mio codice ottengo errori.Impossibile recuperare una riga dal provider OLE DB "BULK" per server collegato "(null)"

Ecco il mio codice:

USE [Intradata NYSE] 
GO 
CREATE TABLE CSVTest1 
(Ticker varchar(10) NULL, 
dateval date NULL, 
timevale time(0) NULL, 
Openval varchar(10) NULL, 
Highval varchar(10) NULL, 
Lowval varchar(10) NULL, 
Closeval varchar(10) NULL, 
Volume varchar(10) NULL 
) 
GO 

BULK 
INSERT CSVTest1 
FROM 'c:\intramerge.csv' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 
--Check the content of the table. 
SELECT * 
FROM CSVTest1 
GO 
--Drop the table to clean up database. 
DROP TABLE CSVTest1 
GO 

cerco di costruire un database con un sacco di stockquotes. Ma ottengo questo messaggio di errore:

Msg 4832, livello 16, stato 1, riga 2 Caricamento di massa: La fine inaspettata di file è stato rilevato nel file di dati. Messaggio 7399, livello 16, stato 1, Riga 2 Il provider OLE DB "BULK" per server collegato "(null)" ha segnalato un errore. Il provider non ha fornito alcuna informazione circa l'errore . Msg 7330, livello 16, stato 2, riga 2 Impossibile recuperare una riga dal provider OLE DB "MASSA" per il server collegato "(null)"

non capisco molto di SQL, ma spero di recuperare una cosa o due. Spero che qualcuno veda cosa potrebbe essere molto ovvio.

risposta

4

Ho ricevuto lo stesso errore quando avevo un numero diverso di campi delimitati nel mio CSV rispetto alle colonne che avevo nella mia tabella. Controlla se hai il numero giusto di campi in intramerge.csv.

1

Era una vecchia domanda ma sembra che la mia scoperta avrebbe illuminato alcune altre persone che hanno un problema simile.

Il valore di timeout SSIS predefinito sembra essere 30 secondi. Ciò rende qualsiasi operazione legata al servizio o all'operazione legata all'IO nel proprio pacchetto che va ben oltre quel valore di timeout e causa un timeout. Aumentando il valore di timeout (passare a "0" senza timeout) si risolverà il problema.

11

Ho avuto lo stesso problema.

Soluzione:

Verificare il CSV o file di testo in editor di testo come blocco note +. L'ultima riga potrebbe essere incompleta. Rimuoverla.

9

Resurrecting una vecchia questione, ma nel caso in cui questo aiuta qualcun altro: (! Finalmente) dopo molti tentativi ed errori sono stato finalmente in grado di sbarazzarsi di questo errore modificando questo:

ROWTERMINATOR = '\n' 

Per questo:

ROWTERMINATOR = '0x0A' 
+1

Questo ha funzionato per me. Inoltre, raccomando di eseguire il comando 'more' in CMD per ispezionare la fine di file di dimensioni maggiori per footer o problemi. Se fai 'more + n [nomefile]' il CMD mostrerà tutte le righe dopo 'n', usalo per ispezionare vicino alla fine del file. – rjmd

2

ho ottenuto questo errore quando il mio file di formato (ad esempio specificato usando il FORMATFILE param) aveva una larghezza di colonna che era più piccola rispetto alla dimensione di colonna effettiva (ad esempio, invece di varchar(50)varchar(100)).

+0

Caso simile per me, cambiare il tipo di dati 'int' della colonna in' bigint' risolve il problema. Comunque penso che questo dovrebbe sollevare un errore di "overflow". – Athafoud

+0

Lo stesso per me. Niente a che vedere con la dimensione della colonna, ma un file di formato errato lo stesso. –

1

Ho ottenuto questa eccezione quando il campo char nella mia tabella SQL era troppo piccolo per il testo in arrivo. Prova a ingrandire la colonna.

0

Questa potrebbe essere una cattiva idea con un 1,5 GB completo, ma si può provare su un sottoinsieme (iniziare con alcune righe):

CREATE TABLE CSVTest1 
(Ticker varchar(MAX) NULL, 
    dateval varchar(MAX) NULL, 
    timevale varchar(MAX) NULL, 
    Openval varchar(MAX) NULL, 
    Highval varchar(MAX) NULL, 
    Lowval varchar(MAX) NULL, 
    Closeval varchar(MAX) NULL, 
    Volume varchar(MAX) NULL 
) 

...fai il tuo BULK INSERT, quindi

SELECT MAX(LEN(Ticker)), 
    MAX(LEN(dateval)), 
    MAX(LEN(timevale)), 
    MAX(LEN(Openval)), 
    MAX(LEN(Highval)), 
    MAX(LEN(Lowval)), 
    MAX(LEN(Closeval)), 
    MAX(LEN(Volume)) 

Questo ti aiuterà a dirti se le tue stime di colonna sono lontane. Potresti anche scoprire che le tue colonne sono fuori servizio o che BULK INSERT potrebbe ancora fallire per qualche altro motivo.

Problemi correlati