Tôi đã tái tạo sự cố của bạn trên SQL Server 2008 R2. Giải pháp đơn giản như thêm một dòng mới vào tệp của bạn để hàng cuối cùng kết thúc bằng một dòng mới.
Tôi đã tạo hai tệp:
Sau đó, chạy tập lệnh sau:
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;
Kết quả 1:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Kết quả 2:
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Mike | Johnson 1/29/1987 | M | NULL
Giải pháp phải đơn giản như đảm bảo dòng cuối cùng kết thúc bằng \r\n
. Bạn có thể thay đổi quy trình tạo tệp văn bản hoặc thực hiện thủ công ngay trước khi thực hiện chèn hàng loạt.
Một cách để thực hiện việc này theo cách thủ công là chạy echo của EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt'
ngay trước khi bạn thực hiện chèn hàng loạt.