sqlserver fieldterminator espaƱol database csv bulk

database - fieldterminator - No se puede obtener una fila del proveedor OLE DB "BULK" para el servidor vinculado "(nulo)"



csv to sql (8)

Intento cargar mi base de datos con toneladas de datos de un archivo .csv con un tamaño de 1.4 GB. Pero cuando intento ejecutar mi código obtengo errores.

Aquí está mi código:

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

Intento construir una base de datos con muchas cotizaciones. Pero me sale este mensaje de error:

Mensaje 4832, Nivel 16, Estado 1, Línea 2 Carga masiva: Se encontró un final de archivo inesperado en el archivo de datos. Msg 7399, nivel 16, estado 1, línea 2 El proveedor OLE DB "BULK" para el servidor vinculado "(nulo)" informó un error. El proveedor no dio ninguna información sobre el error. Msg 7330, nivel 16, estado 2, línea 2 No se puede obtener una fila del proveedor OLE DB "BULK" para el servidor vinculado "(nulo)"

No entiendo mucho de SQL, pero espero captar una cosa o dos. Espero que alguien vea lo que podría ser muy obvio.


Era una pregunta antigua, pero parece que mi descubrimiento iluminaría a otras personas que tienen un problema similar.

El valor predeterminado de tiempo de espera de SSIS parece ser 30 segundos. Esto hace que cualquier operación de enlace de servicio o de IO en su paquete vaya más allá de ese valor de tiempo de espera y cause un tiempo de espera. Aumentar ese valor de tiempo de espera (cambiar a "0" sin tiempo de espera) resolverá el problema.


Esto podría ser una mala idea con un total de 1.5 GB, pero puede intentarlo en un subconjunto (comience con unas pocas filas):

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 )

... haz tu INSERTO A GRANEL, entonces

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))

Esto te ayudará a decirte si tus estimaciones de columna están muy lejos. También puede encontrar que sus columnas están fuera de orden, o que BULK INSERT aún puede fallar por alguna otra razón.


Obtuve esta excepción cuando el campo char en mi tabla SQL era demasiado pequeño para el texto que entraba. Intenta agrandar la columna.


Recibí el mismo error cuando tuve un número diferente de campos delimitados en mi CSV que las columnas que tenía en mi tabla. Compruebe si tiene el número correcto de campos en intramerge.csv .


Recibí este error cuando mi archivo de formato (es decir, especificado utilizando el FORMATFILE ) tenía un ancho de columna que era más pequeño que el tamaño de columna real (por ejemplo, varchar(50) lugar de varchar(100) ).


Resucitando una vieja pregunta, pero en caso de que esto ayude a alguien más: después de muchas pruebas y errores, finalmente (por fin!) Pude deshacerme de este error cambiando esto:

ROWTERMINATOR = ''/n''

A esto:

ROWTERMINATOR = ''0x0A''


Solo quiero compartir mi solución a esto. El problema fue el tamaño de las columnas de la tabla, use varchar (255) y todo debería funcionar.


Tuve el mismo problema.

Solución:

Verifique el archivo CSV o de texto en editores de texto como notepad +. La última línea podría estar incompleta. Quitarlo