sql >> Base de Datos >  >> RDS >> Sqlserver

¿Falta la última fila del INSERTO A GRANEL?

Reproduje su problema en SQL Server 2008 R2. La solución es tan simple como agregar una nueva línea a su archivo para que la última fila termine con una nueva línea.

Creé dos archivos:

Luego ejecutó el siguiente script:

CREATE TABLE #t(first_name VARCHAR(128),last_name_etc VARCHAR(128),sex CHAR(1),test VARCHAR(128));

BULK INSERT #t
FROM 'C:\temp\without_newline.txt'
WITH (
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
);

SELECT * FROM #t;

TRUNCATE TABLE #t;

BULK INSERT #t
FROM 'C:\temp\with_newline.txt'
WITH (
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
);

SELECT * FROM #t;

DROP TABLE #t;

Resultado 1:

first_name  | last_name_etc     | sex | test
--------------------------------------------
Tom         | Jackson 2/28/1986 | M   | test

Resultado 2:

first_name  | last_name_etc     | sex | test
--------------------------------------------
Tom         | Jackson 2/28/1986 | M   | test
Mike        | Johnson 1/29/1987 | M   | NULL

La solución debería ser tan simple como asegurarse de que la última línea termine con \r\n . O cambia el proceso que genera el archivo de texto o lo hace manualmente justo antes de hacer la inserción masiva.

Una forma de hacer esto manualmente sería ejecutar EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt' justo antes de hacer la inserción masiva.