Přišel jsem sem, než jsem hledal řešení pro hromadné vkládání speciálních znaků. Nelíbilo se mi řešení s UTF-16 (to by zdvojnásobilo velikost souboru csv). Zjistil jsem, že určitě MŮŽETE a je to velmi snadné, ne Nepotřebuji formátový soubor. Tato odpověď je pro ostatní lidi, kteří hledají totéž, protože se nezdá, že by to bylo nikde dobře zdokumentováno, a věřím, že je to velmi častý problém pro neanglicky mluvící lidi. Řešením je:stačí přidat CODEPAGE='65001' dovnitř příkazu with hromadného vložení. (65001=číslo kódové stránky pro UTF-8). Nemusí fungovat pro všechny znaky Unicode, jak navrhuje Michael O, ale alespoň to funguje perfektně pro latinku, řečtinu a cyrilici, pravděpodobně také pro mnoho dalších.
Poznámka:Dokumentace MSDN říká, že utf-8 není podporováno, nevěřte tomu, pro mě to na serveru SQL Server 2008 funguje perfektně, jiné verze jsem však nezkoušel.
např.:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = '65001',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
Pokud jsou všechny vaše speciální znaky v 160-255 (iso-8859-1 nebo windows-1252), můžete také použít:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = 'ACP',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);