Vine aquí antes de buscar una solución para la inserción masiva de caracteres especiales. No me gustó la solución con UTF-16 (que duplicaría el tamaño del archivo csv). Descubrí que definitivamente PUEDES y es muy fácil, no No necesito un archivo de formato. Esta respuesta es para otras personas que buscan lo mismo, ya que no parece estar bien documentado en ninguna parte, y creo que este es un problema muy común para las personas que no hablan inglés. La solución es:simplemente agregue CODEPAGE='65001' dentro de la instrucción with de la inserción masiva. (65001=número de página de códigos para UTF-8). Puede que no funcione para todos los caracteres Unicode como sugiere Michael O, pero al menos funciona perfecto para caracteres latinos extendidos, griegos y cirílicos, y probablemente muchos otros también.
Nota:la documentación de MSDN dice que utf-8 no es compatible, no lo crea, para mí esto funciona perfectamente en el servidor SQL 2008, sin embargo, no probé otras versiones.
por ejemplo:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = '65001',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
Si todos sus caracteres especiales están en 160-255 (iso-8859-1 o windows-1252), también podría usar:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = 'ACP',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);