11

SQL Server 2000 の BCP ユーティリティを使用してデータをエクスポートする必要があります。データに \t や \n などの文字が含まれていることがあります。これらの文字は、列と行のターミネータとして使用する必要があります。BCP がデータを出力するときにターミネータとして使用している文字をエスケープして、実際にデータを別のプログラムにインポートできるようにするにはどうすればよいですか?

たとえば、私の列の 1 つはテキスト データで、タブと改行が含まれています。BCP はそれらをそのままエクスポートするだけであり、インポートしようとしているプログラムは、データが行の途中で終わっているか、明確な理由もなく行に余分な列が含まれているため、混乱します。

これは、データ エクスポーターに含める非常に非常に基本的な機能のように思えますが、コマンド ライン オプションのどれもそれについて言及していないようです。(なぜそれがデフォルトではないのかは私を超えています。) 何か不足していますか?

4

4 に答える 4

10

あなたに完全に同意します。エスケープはオプションであるべきです。「タブや改行を含むデータを使用することはできません」は、私が今まで聞いた中で最もばかげたことです。

考えられる解決策は次のとおりです。

  1. -r オプションを使用して、別の行ターミネータを設定します。データに存在する可能性が低いもの
    (#!#$#%#)。
    複数のキャラが使えるので使いやすいと思います。
  2. 有能なテキスト エディタである sed でデータ ファイルを開くか、スクリプトを作成して、\n および \t 文字をエスケープされた同等の文字 (\\n および \\t) に置き換えます。最後に、行末記号を \n に置き換えると、うまくいくはずです。
  3. フィールドターミネータに -t を使用する場合も同じことが当てはまると思います

詳細については、この記事をご覧ください

于 2013-05-26T16:10:14.017 に答える
-2

私は同じ問題を抱えており、解決策を見つけるために長い間検索しました。これは BCP マスターから見つけたもので、合理的に聞こえます。おそらく、あなたもそれを試してみたいと思うでしょう。

考えられる解決策: http://groups.google.co.uk/group/microsoft.public.sqlserver.tools/tree/browse_frm/thread/f1ee12cba3079189/ef9094123901fe26?rnum=1&q=lindawie+format+file&_done=%2Fgroup%2Fmicrosoft. public.sqlserver.tools%2Fbrowse_frm%2Fthread%2Ff1ee12cba3079189%2Fef9094123901fe26%3Ftvc%3D1%26q%3Dlindawie%2Bformat%2Bfile%26#doc_fa5708ca51d967a6

フォーマット ファイルの詳細と設計: http://msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx

通常、BCP の問題と解決策について知っていただくために、次のリンクをお勧めします: http://groups.google.co.uk/groups?q=lindawie+format+file

よろしくお願いします

于 2010-10-15T10:22:53.313 に答える
-9

タブと改行を含むデータに、タブと改行の区切り記号を付けることはできません。意味がない。タブはタブであるため、エスケープは役に立ちません。ここでは、C# の文字列処理について話しているわけではありません。

私がしたいことは、やなどのさまざまなターミネータを使用するか、フォーマットファイルを使用することです|||/n

于 2009-12-29T19:23:10.730 に答える