Przyszedłem tutaj, zanim szukałem rozwiązania do zbiorczego wstawiania znaków specjalnych. Nie podobało mi się obejście z UTF-16 (które podwoiłoby rozmiar pliku csv). Dowiedziałem się, że zdecydowanie MOŻESZ i jest to bardzo łatwe, nie Potrzebuję pliku formatu. Ta odpowiedź jest dla innych osób, które szukają tego samego, ponieważ nie wydaje się, aby była ona nigdzie dobrze udokumentowana, i uważam, że jest to bardzo częsty problem dla osób nie mówiących po angielsku. Rozwiązaniem jest:po prostu dodaj CODEPAGE='65001' wewnątrz instrukcji z wstawką zbiorczą. (65001=numer strony kodowej dla UTF-8). Może nie działać dla wszystkich znaków Unicode, jak sugerował Michael O, ale przynajmniej działa idealnie dla rozszerzonego alfabetu łacińskiego, greckiego i cyrylicy, prawdopodobnie także wielu innych.
Uwaga:dokumentacja MSDN mówi, że utf-8 nie jest obsługiwany, nie wierz w to, dla mnie działa to idealnie w SQL Server 2008, jednak nie próbowałem innych wersji.
np.:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = '65001',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
Jeśli wszystkie twoje znaki specjalne są w 160-255 (iso-8859-1 lub windows-1252), możesz również użyć:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = 'ACP',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);