none
SQLserver2014へのUTF-8TSV/CSVのBULKinsert方法をご教示下さい。 RRS feed

  • 質問

  • 環境
    Microsoft Windows NT 6.3 (9600)
    Microsoft SQL Server 2014 - 12.0.2269.0 (X64)    Microsoft SQL Server Enterprise: Core-based Licensing (64-bit)
    Python 2.7.12

    目的:
        SQLserverからselectした大量のレコードをpythonで文字列置換などの処理を行い、結果をSQLserverに書き戻したい

    質問:
    Q1)SQLserverへのBulkインサートは「UTF-8」はサポートしていないため、
     UTF-8→UTF-16-LE(コードページ1200)へ変換してからBulkインサートすべきである
     という認識は誤っていないでしょうか?
    Q2)上記認識が誤っていない前提で、なぜ「一括読み込みデータ変換エラー (切り捨て)。」が
     発生してしまうのでしょうか?
    Q3)エラー原因の特定のために、どこかにエラーの詳細などがわかるlogは出ていないのでしょうか?
    ※Bulkインサートのwith内に「ERRORFILE」を入れてみましたが、いまいち見かたがわかっておりません。

    やったこと

        ソースファイルの作成
            1)PythonからSQLserverへ接続し、文字列処理後、UTF-8でテキスト出力→utf-8.txt
            2)インポート用fmtファイルの作成
        インサートファイル作成
            3)1)「utf-8.txt」をpythonでutf-16にencode変換→utf-16.txt
            4)1)「utf-8.txt」をexcelでunicodeテキストに変換→unicode.txt
        BULKインサート
            5)3)「utf-16.txt」をBulkインサート→「一括読み込みデータ変換エラー (切り捨て)。」
            6)4)「unicode.txt」をBulkインサート→「一括読み込みデータ変換エラー (切り捨て)。」

        ※3)4)とも、改行コードは\r,\n,\r\nのいずれでもダメでした。

        ※以下のような形でのBULKインサートを行っております。
        ----------------------------
        BULK INSERT <DB名>.[dbo].<TABLE名>
        FROM 'インポートファイルPATH'
        WITH
        (
            CODEPAGE = '1200',
            DATAFILETYPE ='widechar',
            FORMATFILE='fmtファイルPATH',
            KEEPNULLS
        );
        ----------------------------

    サンプルテーブルなどを作ってからの質問をしたほうが具体的であるとは思うのですが、
    当方勉強中ですので、何か基本的なことがわかっていないのではないかと懸念しております。

    「UTF-8で出力したテキストは通常こうやって処理するのである」という
    基本的なナレッジなどが有りましたら、ご教示いただきたく
    まずは上記の情報にてご質問させていただきます。
    2016年10月22日 9:15