i am doing a bulk insert:
DECLARE @row_terminator CHAR; SET @row_terminator = CHAR(10); -- or char(10) DECLARE @stmt NVARCHAR(2000); SET @stmt = ' BULK INSERT accn_errors FROM ''F:FullUnzippedaccn_errors_201205080105.txt'' WITH ( firstrow=2, FIELDTERMINATOR = ''|'' , ROWS_PER_BATCH=10000 ,ROWTERMINATOR='''+@row_terminator+''' )' exec sp_executesql @stmt;
and am getting the following error:
Msg 4832, Level 16, State 1, Line 2 Bulk load: An unexpected end of file was encountered in the data file. Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error. Msg 7330, Level 16, State 2, Line 2 Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
is there a way to know on which ROW this error occurred?
i am able to import 10,000,000 rows without a problem and error occurs after that
Advertisement
Answer
To locate the troublesome row use the errorfile specifier.
BULK INSERT myData FROM 'C:......myData.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = 'n', ERRORFILE = 'C:......myRubbishData.log' );
myRubbishData.log will have the offending rows and a companion file myRubbishData.log.txt will give you row numbers and offsets into the file.
Companion file example:
Row 3 File Offset 152 ErrorFile Offset 0 - HRESULT 0x80004005 Row 5 File Offset 268 ErrorFile Offset 60 - HRESULT 0x80004005 Row 7 File Offset 384 ErrorFile Offset 120 - HRESULT 0x80004005 Row 10 File Offset 600 ErrorFile Offset 180 - HRESULT 0x80004005 Row 12 File Offset 827 ErrorFile Offset 301 - HRESULT 0x80004005 Row 13 File Offset 942 ErrorFile Offset 416 - HRESULT 0x80004005