Váš problém jsem reprodukoval na SQL Server 2008 R2. Řešení je stejně jednoduché jako přidání nového řádku do souboru tak, že poslední řádek končí novým řádkem.
Vytvořil jsem dva soubory:
Poté spusťte následující 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;
Výsledek 1:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Výsledek 2:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Mike | Johnson 1/29/1987 | M | NULL
Řešení by mělo být tak jednoduché, že se ujistěte, že poslední řádek končí znakem \r\n
. Buď změníte proces, který generuje textový soubor, nebo to proveďte ručně těsně před hromadným vkládáním.
Jedním ze způsobů, jak to udělat ručně, by bylo spustit EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt'
těsně předtím, než provedete hromadné vložení.