Възпроизвеждах вашия проблем на SQL Server 2008 R2. Решението е толкова просто, колкото добавяне на нов ред към вашия файл, така че последният ред да завършва с нов ред.
Създадох два файла:
След това изпълни следния скрипт:
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;
Резултат 1:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Резултат 2:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Mike | Johnson 1/29/1987 | M | NULL
Решението трябва да е толкова просто, колкото да се уверите, че последният ред завършва с \r\n
. Или променяте процеса, който генерира текстовия файл, или го правите ръчно непосредствено преди груповото вмъкване.
Един от начините да направите това ръчно е да стартирате EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt'
точно преди да направите груповото вмъкване.