0

SQLServerExpressデータベースにデータを一括挿入しようとしています。Windows XPのコマンドプロンプトからbcpを実行すると、次のエラーが発生します。

C:\ temp> bcp in -T -f -S

コピーを開始しています...
SQLState = S1000、NativeError = 0
エラー=[Microsoft][SQL NativeClient]BCPデータファイルで予期しないEOFが発生しました

0行がコピーされました。
ネットワークパケットサイズ(バイト):4096
クロック時間(ミリ秒)合計:4391

したがって、EOFに問題があります。PerlまたはPythonを使用してこのファイルに正しいEOF文字を追加するにはどうすればよいですか?

4

3 に答える 3

3

EOFはファイルの終わりです。おそらく発生したのは、ファイルが完全ではないということです。ソフトウェアはデータを期待しますが、もう存在するものはありません。

これらの種類のことは次の場合に発生します。

  • エクスポートが中断されます(ダンプ中にダンプソフトウェアを終了します)
  • ダンプファイルのコピー中にコピーを中止します
  • ダンプ中にディスクがいっぱいになりました

これらの種類のもの。

ちなみに、EOFは通常ファイルの終わりにすぎませんが、EOF文字が存在します。これは、ターミナル(コマンドライン)入力がファイルのように実際には終了しないために使用されますが、そのようなユーティリティにEOFを渡す必要がある場合があります。少なくともファイルの終わりを示すために、実際のファイルで使用されているとは思いません。ファイルシステムは、ファイルがいつ終了したかを完全に認識しているので、それを見つけるためのインジケーターは必要ありません。

ジョン・マチンによって提供されたコメントから恥知らずにコピーされた編集

これは、実際のファイルで(意図せずに)発生する可能性があります。必要なのは、(1)データ入力ユーザーが誤ってCtrl-Zを入力し、画面に何も表示されず、目的のShift-Zを入力して続行することと、(2)検証ソフトウェア(たとえば、会社の社長の甥によって書かれた)だけです。 )これは、テキストフィールドでCtrl-anykeyを喜んで受け入れ、データベースには小さな爆弾があり、誰かがフラットファイルへのクエリを生成するのを待っています。

于 2010-03-03T13:44:38.267 に答える
3

予期しないEOFは、bcpリーダーがより多くのデータを期待しているときにEOFを検出したことを意味します。このEOFは次のようになります。

(1)実際の物理的なファイルの終わり(読み取られるバイト数はこれ以上ありません)。これは、データのフォーマットが間違っていることを意味します。不完全なレコードがないか、ファイルの終わり近くを確認してください。

また

(2)Windowsでは、テキストモードでファイルを読み取るプログラムは、CS-DOSを介してCP / Mから継承されたCtrl-Z(別名^Z別名\'x1A'別名SUB別名SUBSTITUTE)に関する古い規則を尊重します。端末だけでなく、任意のファイルから読み取るときのファイルの終わりマーカー。これにはPythonが含まれます。動作はCstdlibによって決定されます。データ内の「\x1A」を確認してください。

コメントへの応答を読みやすい方法で更新します。

Notepad ++では、[表示]/[記号を表示]/[すべての文字を表示]を実行して、通常とは異なる文字を表示することができます。Ctrl-Fを押し、[検索する文字列]ボックスに\ x1aと入力し、[検索]パネルの[拡張]ラジオボタンを選択すると、検索できます。

または、Pythonを少し使用して、最初のCtrl-Zの行番号を取得することもできます。

bytes = open('bcp.dat', 'rb').read()
zpos = bytes.find('\x1a')
# if zpos is -1, no Ctrl-Z in file
print 1 + bytes[:zpos].count('\r\n')

.datがどこで作成されたかは関係ありません。意図しないCtrl-Zは、任意のオペレーティングシステムで作成されたファイルのどこでも発生する可能性があります。重要なのはテキストファイルとして読み取られている場所です-Windows?バン!

于 2010-03-03T14:08:18.903 に答える
1

これは、EOFが欠落している場合の問題ではありませんが、そこにあり、bcpによって予期されていないEOFの場合です。

私はbcpツールの専門家ではありませんが、データファイルの形式に問題があるようです。

于 2010-03-03T13:39:17.643 に答える