特殊文字を一括挿入するための解決策を探す前にここに来ました。UTF-16(csvファイルのサイズが2倍になる)の回避策が気に入らなかったのですが、間違いなく可能であり、非常に簡単であることがわかりました。フォーマットファイルが必要です。この回答は、どこにも文書化されていないように見えるため、同じものを探している他の人向けです。これは、英語を話さない人にとっては非常に一般的な問題だと思います。解決策は次のとおりです。一括挿入のwithステートメント内にCODEPAGE='65001'を追加するだけです。 (65001 =UTF-8のコードページ番号)Michael Oが提案したように、すべてのUnicode文字で機能するとは限りませんが、少なくともラテン文字拡張、ギリシャ語、キリル文字、おそらく他の多くの文字にも最適です。
注:MSDNのドキュメントには、utf-8はサポートされていないと記載されていますが、信じられません。これはSQL Server 2008で完全に機能しますが、他のバージョンは試していません。
例:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = '65001',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
すべての特殊文字が160-255(iso-8859-1またはwindows-1252)である場合は、次を使用することもできます:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = 'ACP',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);