Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

BULK INSERT está faltando na última linha?


Reproduzi seu problema no SQL Server 2008 R2. A solução é tão simples quanto adicionar uma nova linha ao seu arquivo para que a última linha termine com uma nova linha.

Criei dois arquivos:

Em seguida, execute o seguinte 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

A solução deve ser tão simples quanto garantir que a última linha termine com \r\n . Você altera o processo que gera o arquivo de texto ou o faz manualmente antes de fazer a inserção em massa.

Uma maneira de fazer isso manualmente seria executar EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt' logo antes de fazer a inserção em massa.