2012-12-21 16 views
21

Używam BULK INSERT do importowania pliku CSV. Jedna z kolumn w pliku CSV zawiera wartości zawierające ułamki (np. 1m½f).Znaki specjalne wyświetlane niepoprawnie po wstawieniu BULK INSERT

Nie muszę wykonywać żadnych operacji matematycznych we frakcjach, ponieważ wartości będą używane tylko do celów wyświetlania, więc ustawiłem kolumnę jako nvarchar. Numer BULK INSERT działa, ale gdy przeglądam rekordy w SQL, część została zamieniona na symbol centowy (¢), więc wyświetlany tekst to 1m¢f.

Chciałbym zrozumieć, dlaczego tak się dzieje i wszelkie przemyślenia dotyczące rozwiązania tego problemu. Komenda BULK INSERT jest:

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

Czy dane zawierają dosłownie znak połówkowy? – Melanie

+0

Tak, zawiera znak ½ w przeciwieństwie do 1/2. – MrMatt

+0

@AaronBertrand, większość Insert: 'code' masowy wstawić dbo.temp z 'C: \ temp \ FILE.CSV' Z (FIELDTERMINATOR = '', ROWTERMINATOR = '\ n'); \t Kolacja to Latin1_General_CI_AS. Jak sprawdzić, czy plik jest oznaczony jako Unicode? – MrMatt

Odpowiedz

39

Trzeba BULK INSERT pomocą CODEPAGE = 'ACP', który konwertuje ciąg danych z systemu Windows kodowej do SQL Server kodowej.

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

Dziękuję, to działa. – MrMatt

+0

To było również potrzebne do poprawnego wstawiania tekstu wstawionego ansii z akcentowanymi znakami, takimi jak è, w nim. – monty