2011-09-22 19 views
13

sto ottenendo questo errorecaricamento di massa (troncamento)

Bulk load data conversion error (truncation) for row 1, column 12 (is_download) 

qui è la csv ... ha una sola fila

30,Bill,Worthy,sales,,709888499,[email protected],,"Im a a people person., to work together for this new emerging env.HTTP://applesoftware.com","Bill and Son of Co","Contact Us: Contact Form",0 

qui è la mia dichiarazione di inserimento di massa .. .

SE SalesLogix 
GO 

CREATE TABLE CSVTemp 
(id INT, 
firstname VARCHAR(255), 
lastname VARCHAR(255), 
department VARCHAR(255), 
architecture VARCHAR(255), 
phone VARCHAR(255), 
email VARCHAR(255), 
download VARCHAR(255), 
comments VARCHAR(MAX), 
company VARCHAR(255), 
location VARCHAR(255), 
is_download VARCHAR(255) 
) 
GO 

BULK 
INSERT CSVTemp 
FROM 'c:\leads\leads.csv' 
WITH 
(
DATAFILETYPE = 'char', 
BATCHSIZE = 50, 
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 
--Check the content of the table. 
SELECT * 
FROM CSVTemp 
GO 

il problema è la maggior parte del tempo funziona grande, ma in alcune situazioni (questo è uno di loro) ottengo gli errori

tutte le idee su ciò che sta causando questo record di avere questo errore

risposta

12

Sta raccogliendo le virgole nel campo commenti come delimitatori, perché i delimitatori non sono coerenti. La soluzione migliore è assicurarsi che tutti i campi siano racchiusi tra virgolette doppie e impostare FIELDTERMINATOR su '","'. In alternativa, sostituire le virgole con qualcosa di improbabile nei commenti (come ~) e impostare FIELDTERMINATOR = '~'.

+0

grazie @wil che ha aiutato un sacco – Trace

6

Oltre ai commenti di Wil, sembra che stia vedendo tutte e 12 le colonne, quindi potrebbe essere solo che il rowterminator non è corretto. Innanzitutto, assicurati che il programma che mette insieme questi file inserisca effettivamente un ritorno a capo alla fine dell'ultima riga; Ho dovuto correggere molti programmi in cui questo non era il caso. Una volta che sei sicuro che ci sia un ritorno a capo, potresti dover sperimentare per vedere quale tipo di ritorno a capo è. A volte è solo char (10), a volte solo char (13), ea volte può avere entrambe ma è nell'ordine sbagliato. Così sperimentare:

ROWTERMINATOR = '\n' 
ROWTERMINATOR = '\r' 
ROWTERMINATOR = '\n\r' 
ROWTERMINATOR = '\r\n' 
+0

Spesso se la ROWTERMINATOR non è corretta o incoerente può causare a coniugare le righe fino a raggiungere il terminatore riconosciuta o addirittura EOF. Ho avuto questo successo prima. – Wil

0

System.Data.SqlClient.SqlException (0x80131904): errore di conversione dei dati di carico alla rinfusa (troncamento) per la riga 97, colonna 33

Per l'errore precedente, è può controllare

  • tipo di dati dimensione di colonna (ad esempio VARCHAR (255)) è se è sufficiente per importare dati o meno.
  • E il terminatore di riga ad es.
    • ROWTERMINATOR = '0x0A'
    • ROWTERMINATOR = '\ n'
    • ROWTERMINATOR = '\ r \ n'
  • FIELDTERMINATOR
    • Assicurarsi che la terminazione di campo selezionato non lo fa si verificano con i dati. Se esiste una possibilità, sostituiscila con qualche altro carattere, ad es. | nel file.