Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

BULK INSERT thiếu hàng cuối cùng?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để cải thiện hiệu suất cho tính năng lọc ngày giờ trong SQL Server?

  2. UNION kết quả của nhiều thủ tục được lưu trữ

  3. Cách quản lý GetDate () với Entity Framework

  4. Hiểu kích thước bộ nhớ ‘datetime2’ trong SQL Server

  5. Cấp quyền truy cập vào một db cho người dùng / vai trò của người khác