2012-12-21 35 views
21

Tôi đang sử dụng BULK INSERT để nhập tệp CSV. Một trong các cột trong tệp CSV chứa một số giá trị chứa phân số (ví dụ: 1m½f).Các ký tự đặc biệt hiển thị không chính xác sau khi SỐ LƯỢNG LỚN INSERT

Tôi không cần thực hiện bất kỳ phép toán nào trên các phân số, vì các giá trị sẽ chỉ được sử dụng cho mục đích hiển thị, vì vậy tôi đã đặt cột là nvarchar. BULK INSERT hoạt động nhưng khi tôi xem các bản ghi trong SQL phần đã được thay thế bằng một ký hiệu cent (¢) để văn bản được hiển thị là 1m¢f.

Tôi muốn biết tại sao điều này xảy ra và bất kỳ suy nghĩ nào về cách giải quyết vấn đề. Lệnh BULK INSERT là:

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'); 
+0

Dữ liệu có nghĩa đen chứa ký tự một nửa không? – Melanie

+0

Có, nó chứa ký tự as trái ngược với 1/2. – MrMatt

+0

@AaronBertrand, Chèn hàng loạt là: 'code' BULK INSERT dbo.temp TỪ 'C: \ Temp \ file.csv' VỚI (FIELDTERMINATOR = '', ROWTERMINATOR = '\ n'); \t Collation là Latin1_General_CI_AS. Làm cách nào để kiểm tra xem tệp có được đánh dấu là Unicode không? – MrMatt

Trả lời

39

Bạn cần phải BULK INSERT sử dụng CODEPAGE = 'ACP', chuyển đổi dữ liệu chuỗi từ Windows bảng mã để SQL Server bảng mã.

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP'); 
+0

Thankyou, công trình này. – MrMatt

+0

Đây cũng là những gì tôi cần để chèn chính xác hàng loạt văn bản ansii với các ký tự có dấu trọng âm, chẳng hạn như è, trong đó. – monty

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