txt habilitar firstrow español ejemplos sql sql-server sql-server-2008 bulkinsert

habilitar - bulk insert sql server txt ejemplos



Determine el ROW que causó el error de "final de archivo inesperado" en BULK INSERT? (10)

Estoy haciendo un inserto a granel:

DECLARE @row_terminator CHAR; SET @row_terminator = CHAR(10); -- or char(10) DECLARE @stmt NVARCHAR(2000); SET @stmt = '' BULK INSERT accn_errors FROM ''''F:/FullUnzipped/accn_errors_201205080105.txt'''' WITH ( firstrow=2, FIELDTERMINATOR = ''''|'''' , ROWS_PER_BATCH=10000 ,ROWTERMINATOR=''''''+@row_terminator+'''''' )'' exec sp_executesql @stmt;

y estoy recibiendo el siguiente 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)".

¿Hay alguna forma de saber en qué ROW se produjo este error?

Soy capaz de importar 10,000,000 filas sin un problema y se produce un error después de eso


Diversión diversión diversión. No he encontrado una buena manera de depurar estos problemas, así que uso la fuerza bruta. Es decir, las opciones FirstRow y LastRow son muy útiles.

Comience con LastRow = 2 y siga intentando. Cargue los resultados en una tabla desechable, que pueda truncar fácilmente.

Y también debe tener en cuenta que la primera fila también podría estar causándole problemas.


En mi experiencia, esto casi siempre es causado por algo en las dos últimas líneas. tail el archivo de importación y todavía debe darle el error. Luego, ábralo en un editor de texto completo que le permita ver los caracteres que no se pueden imprimir, como CR, LF y EOF. Eso debería permitirte convertirlo en trabajo, incluso si no sabes por qué. Por ejemplo, BULK INSERT falla con el terminador de fila en la última fila


Me encontré con el mismo problema. Había escrito un script de shell para crear un .csv en Linux. Llevé este .csv a Windows e intenté cargar de forma masiva los datos. No me "gustaron" las comas ... No me preguntes por qué, pero cambié a a * como delimitador en la importación masiva y realicé una búsqueda y reemplazo por coma con * en mi .csv .. que funcionó .. Cambié a un ~ como delimitador, eso funcionó ... la pestaña también funcionó, no me gustó la coma ... Espero que esto ayude a alguien.


Para localizar la fila problemática use el especificador de archivo de error.

BULK INSERT myData FROM ''C:/.../.../myData.csv'' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''/n'', ERRORFILE = ''C:/.../.../myRubbishData.log'' );

myRubbishData.log tendrá las filas ofensivas y un archivo complementario myRubbishData.log.txt le dará números de filas y compensaciones en el archivo.

Ejemplo de archivo complementario:

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


Resolví el problema convirtiendo todos los campos en cadenas y luego usando un FIELDTERMINATOR común. Esto funcionó:

BULK INSERT [dbo].[workingBulkInsert] FROM ''C:/Data/myfile.txt'' WITH ( ROWTERMINATOR = ''/n'', FIELDTERMINATOR = '','' )

Mi archivo de datos se ve así ahora:

"01502","1470" "01504","686" "02167","882" "106354","882" "106355","784" "106872","784"

El segundo campo había sido un tipo decimal sin delimitador de comillas dobles (como, 1470.00). El formateo de ambas cadenas eliminó el error.


Resolví el problema si convertía todos los campos en una cadena y luego usaba un fielddelimiter común.


Sí, BULK INSERT habría hecho testamento con un poco más de detalle en sus mensajes de error, y la única forma de evitarlo es utilizar el enfoque de fuerza bruta, como Gordon señaló acertadamente. Sin embargo, primero, según el error que está recibiendo, es posible que no comprenda el terminador de su fila o que falte un terminador de fila al final del archivo. Usar FIRSTROW y LASTROW ayudará a determinar eso.

Entonces, necesitas hacer lo siguiente:

  1. Compruebe que hay un terminador de fila al final del archivo. Si no, ponga uno e intente de nuevo. También asegúrese de que la última fila contenga todos los campos necesarios. Dice ''EOF'', entonces ese es tu problema.
  2. ¿Estás seguro de que hay un LF al final de cada línea? Pruebe un CR (/ n, 0x0D) y vea si funciona.
  3. ¿Sigue sin funcionar? Intente configurar LASTROW = 2 y vuelva a intentarlo. A continuación, intente LASTROW = 3. Si tiene más de tres filas en su archivo y este paso falla, entonces el terminador de fila no funciona.

Si CHAR (10) es el terminador de fila, no creo que pueda ponerlo entre comillas como lo está intentando en BULK INSERT. Sin embargo, hay una manera indocumentada de indicarlo:

ROWTERMINATOR = ''0x0A''


Tengo un archivo csv que importo usando Bulk

BULK INSERT [Dashboard].[dbo].[3G_Volume] FROM ''C:/3G_Volume.csv'' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''","'', ROWTERMINATOR = ''/n'' ) GO

Usualmente usé este script y no tiene problemas, pero en raras ocasiones.

Me encuentro con este error ..

"El proveedor OLE DB" BULK "para el servidor vinculado" (nulo) "informó un error. El proveedor no proporcionó ninguna información sobre el error".

Generalmente, esto sucede cuando la última fila tiene valores en blanco (nulo).

Debe vincular su archivo csv en la base de datos de MS Access para verificar los datos. (Si su csv no tiene más de 1.4 millones de filas, puede abrirlo en Excel)

Dado que mis datos están alrededor de 3 millones de filas, necesito usar db de acceso.

Luego verifique el número de la última fila con espacios en blanco y reste el número de filas nulas a sus filas totales para csv.

si tiene 2 filas en blanco al final y el número total de filas es 30000005, la secuencia de comandos será así.

BULK INSERT [Dashboard].[dbo].[3G_Volume] FROM ''C:/3G_Volume.csv'' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ''","'', ROWTERMINATOR = ''/n'', Lastrow = 30000003 ) GO

Saludos ... Mhelboy


las filas que generan este error no tienen terminador CHAR(10) o tienen espacios innecesarios