Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

BULK INSERT letzte Zeile fehlt?

Ich habe Ihr Problem auf SQL Server 2008 R2 reproduziert. Die Lösung ist so einfach wie das Hinzufügen eines Zeilenumbruchs zu Ihrer Datei, sodass die letzte Zeile mit einem Zeilenumbruch endet.

Ich habe zwei Dateien erstellt:

Führen Sie dann das folgende Skript aus:

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;

Ergebnis 1:

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

Ergebnis 2:

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

Die Lösung sollte so einfach sein wie sicherzustellen, dass die letzte Zeile mit \r\n endet . Entweder ändern Sie den Prozess, der die Textdatei generiert, oder führen dies manuell direkt vor der Masseneinfügung durch.

Eine Möglichkeit, dies manuell zu tun, wäre, EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt' kurz bevor Sie die Masseneinfügung vornehmen.