Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

BULK INSERT manca l'ultima riga?

Ho riprodotto il tuo problema su SQL Server 2008 R2. La soluzione è semplice come aggiungere una nuova riga al file in modo che l'ultima riga termini con una nuova riga.

Ho creato due file:

Quindi ha eseguito il seguente 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;

Risultato 1:

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

Risultato 2:

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

La soluzione dovrebbe essere semplice come assicurarsi che l'ultima riga termini con \r\n . O modifichi il processo che genera il file di testo o lo fai manualmente subito prima di eseguire l'inserimento collettivo.

Un modo per farlo manualmente sarebbe eseguire EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt' subito prima di eseguire l'inserimento collettivo.