たちまち。

即席で役に立つこと。

BCP のフォーマットファイル中に正しくないホスト行番号が見つかりました。

SQLServerbcpコマンドを使ってデータを投入していたら、掲題のエラー。

Error = [Microsoft][ODBC Driver 11 for SQL Server]BCP のフォーマットファイル中に正しくないホスト行番号が見つかりました。

フォーマットファイルに問題があるようなのだが… 列番号の指定は確認してもずれていないし… ということで小一時間悩んだ。

結論から言うと、フォーマットファイル内のサーバ側列名に不正な文字を含んでいたのが原因だった。

以下の画像で言う、Server column nameの部分です。

f:id:aposke:20200722112453g:plain

引用元:

フォーマット ファイルを使用したテーブル列のスキップ (SQL Server) - SQL Server | Microsoft Docs

今回のケースでは、この列名に半角スペースが含まれていたのが原因。

取り除いたところ、正常に動作するようになった。

以下、TIPS。

こういう原因不明なエラーが出た場合の切り分け方法として、幸い今回はフォーマットファイルが要因とわかっているので、フォーマットファイルを削りながら実行して確認するというのが効率的。

今回、フォーマットファイルには100列ほど定義してあったので、半分消して50列で実行したらどうなるか、その次は75列、その次は87列…という風に二分探索方式でエラー箇所を特定した。

フォーマットファイルを崩しているのでまともに取り込めないが、問題のエラーが再現していなければフォーマットファイルは正常、としてエラー行を特定することができる。

本当はググったら一発で解決が見つかってほしいところですけどね。可能なら、言語を英語にしてエラーメッセージを確認し、そのメッセージを元に検索すれば英語フォーラムには有益な情報が多く転がっているようです。