2013-01-16 45 views
13

Tôi cố gắng để chạy lệnh sau để dữ liệu chèn số lượng lớn từ một CSV file--"cột quá dài" lỗi với BULK INSERT

BULK INSERT TestDB.dbo.patent 
FROM 'C:\1patents.csv' 
WITH (FIRSTROW = 1, FIELDTERMINATOR = '^', ROWTERMINATOR='\n'); 

Các lỗi tôi nhận được là này--

Msg 4866, Cấp 16, Tiểu bang 1, Dòng 1
Tải hàng loạt không thành công. Cột quá dài trong tệp dữ liệu cho hàng 1, cột 6.
Xác minh rằng trình kết thúc trường và trình kết thúc hàng được chỉ định chính xác.
Msg 7399, Cấp 16, Tiểu bang 1, Dòng 1
Nhà cung cấp OLE DB "BULK" cho máy chủ được liên kết "(null)" đã báo cáo lỗi. Nhà cung cấp không cung cấp bất kỳ thông tin nào về lỗi.
Msg 7330, Cấp 16, Tiểu bang 2, Dòng 1
Không thể tìm nạp hàng từ nhà cung cấp OLE DB "BULK" cho máy chủ được liên kết "(null)".

Bây giờ đây là các dữ liệu trong row-- đầu tiên

00000001^^18360713^295^4^0 

Và trong bảng trường cuối cùng (CORRESP. Đến cột thứ 6 của dữ liệu trên = 0) là loại 'int '.

Tôi đang làm gì sai ở đây? Tại sao tôi nhận được lỗi trên?

+1

Các sự cố thường gặp với dấu phân tách hàng. Kiểm tra dấu phân cách của bạn đúng cách. –

Trả lời

2

Trừ khi nguồn tập tin là Unix, rất có thể là của tập tin hàng terminator thực sự là

\ r \ n

Hoặc sử dụng một trình soạn thảo hex để xác nhận terminator của tập tin, hoặc chỉ cố gắng mà như là terminator hàng.

+0

Tôi đã thử sử dụng trình kết thúc do bạn đề xuất nhưng vẫn gặp lỗi tương tự? Xin vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng nào khác để giúp giải quyết vấn đề này ... cảm ơn .... – Arvind

+12

Câu trả lời ở đây: http://stackoverflow.com/a/4207050/706578 đề xuất sử dụng ROWTERMINATOR = '0x0a' nếu '\ n'or '\ r \ n' không hoạt động cho bạn. Nó làm việc cho tôi! –

29

Tôi đã được trích xuất từ ​​Oracle/Unix. Tôi đã thay thế \r\n bởi ROWTERMINATOR = '0x0a' và nó đã làm việc cho tôi.
Cảm ơn rất nhiều!

+0

Điều này làm việc cho tôi. Cảm ơn (: – Sonu

13

Như đã trả lời ở trên, tôi đã gặp sự cố tương tự khi nhập tệp csv vào SQL Server. Tôi đã sử dụng ROWTERMINATOR = '\n' và tôi cũng đã cố gắng sử dụng '\r\n''\r'. Không ai trong số họ làm việc.

Nhưng khi sử dụng ROWTERMINATOR = '0x0a' bảng được tải mà không gặp sự cố.

Tôi không biết "tại sao?" đằng sau điều này, hy vọng ai đó khác có thể làm sáng tỏ nó.

0

Tôi phải đối mặt với vấn đề tương tự và đã biết rằng trừ khi tệp UNIX là \ r \ n là tốt.

Khi bạn tạo tệp định dạng (.fmt hoặc .xml), hãy chú ý cột thứ 3 từ bên trái. được gọi là chiều dài tối thiểu của cột. Đôi khi máy chủ sql mặc định nó là mặc dù bạn không đề cập đến nó trong tạo tập lệnh. Thay đổi giá trị đó thành .Đôi khi bạn có thể phải cho phép NULL cũng vậy, vì vậy hãy thay đổi thành 0 và nó sẽ hoạt động ngay bây giờ

Các vấn đề liên quan