Ik heb uw probleem gereproduceerd op SQL Server 2008 R2. De oplossing is zo simpel als het toevoegen van een nieuwe regel aan uw bestand, zodat de laatste rij eindigt met een nieuwe regel.
Ik heb twee bestanden gemaakt:
Voer vervolgens het volgende script uit:
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;
Resultaat 1:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Resultaat 2:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Mike | Johnson 1/29/1987 | M | NULL
De oplossing zou zo simpel moeten zijn als ervoor zorgen dat de laatste regel eindigt met \r\n
. Of u wijzigt het proces dat het tekstbestand genereert of u doet het handmatig vlak voordat u de bulkinvoeging uitvoert.
Een manier om dit handmatig te doen is door EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt'
vlak voordat u de bulkinvoeging doet.