Jag återskapade ditt problem på SQL Server 2008 R2. Lösningen är så enkel som att lägga till en ny rad i din fil så att den sista raden avslutas med en ny rad.
Jag skapade två filer:
Körde sedan följande skript:
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;
Resultat 1:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Resultat 2:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Mike | Johnson 1/29/1987 | M | NULL
Lösningen bör vara så enkel som att se till att den sista raden avslutas med \r\n
. Antingen ändrar du processen som genererar textfilen eller gör det manuellt precis innan du gör massinsättningen.
Ett sätt att göra detta manuellt skulle vara att köra EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt'
precis innan du gör bulkinfogningen.