2017-06-22 12 views
0

私は現在、SQL Serverの(2016)にBCPへ(15.7)のSybase ASEデータベースのうち、BCPにしようとしています。すべてのBCPタスクはWindows環境で実行されています。BCPのSybase ASE - カスタムフィールド区切り文字

私はCRLF文字でレコードを持っているように、私はこの問題を克服するために、カスタム・レコード・ターミネータを指定する必要がありました。私が使用したいターミネーターは "〜\ t \ t \ t \ t \ t〜\ r \ n"です。私はファイルを開く必要がある場合に備えて、読みやすさのためにCRLF文字を追加しました。

bcp database..table out table.dat -Sserver -Uuser -Ppassword -c -t "|\t\t\t\t\t|" -r "~\t\t\t\t\t~\r\n" 

私は戻ってSQL ServerにBCP

が、私は「文字列データ、右打ち切り誤差」を取得しています:次のようにコマンドがあります。コマンドは次のようになります。

私はBCPのASE 15.7 SP126バージョンを使用しています。 私はSQL Server 2016バージョンのBCP(13.0.1601.5)をinに使用しています

スレッドhereに基づいて、問題が-rオプションで使用される\ r \ n文字であると判断しました。私がoutで-r "\ r \ n"を使用し、inに-r "0x0a"を使ってテストすれば、それは動作します(データにCRLFがあるレコードでは失敗します)。

はできるだけ早く私はと中の\ rを\ n文字を削除するよう、私は成功したデータにBCPことができます。

私は+ CRLF印刷可能な文字の組み合わせを使用することができますどのような方法であれば

は誰もが知っていますか?

乾杯。

答えて

1

あなたがASEからのデータを引っ張るためMSSQLのbcpを使用している場合は、単に2つのプログラム間のすべての問題を排除する場合は、ASEからのデータを引っ張るためASEのbcpを使用して検討する必要があります。 [詳細については、このスレッド - Sybase bcp vs MSSQL bcpを参照してください。 They definitely do not handle output to a file the same way and the docs for each show that]

なぜターミネーターでCRLF(というよりもすべての\ t)を使用することを主張しているのですか?

bcp ... -t"|&" -r "|&&" ... 
bcp ... -t"##&&" -r "||&&" ... 
+0

など、他の印刷可能な文字の組み合わせを使用できない理由はありません。申し訳ありません。私はASEバージョンのBCP(15.7 SP126)を使用しています。私はOPを更新します。 CRLFの使用に関しては、純粋に読みやすくするためです。タブに関しては、私は他の文字のコンボを試しましたが、いくつかのハッシュされたフィールドで誤ったマッチを見つけました。タブは組織内の他の人によって提案されたので、私はそれについて行きました。 – Ash

+1

実際のデータ(ODの-c)を見て、問題のあるレコードを追跡し、エラーを生成されたフィールドを考え出す...とCRLFの文字を削除しても問題を修正することをテストするから、知っての短い...私は思いますおそらく即座の解決のためにCRLF文字を削除することになります。私は自由時間を持っていると、問題をより詳細に調べることができます(単に学習の練習であれば) – markp

+0

ありがとうございます、それが現在の解決策です。私はそれについてもっと考えると、人間が読むファイルの可能性はスリムであると結論づけているので、おそらく問題ではありません(私が見た最大のものは35GBです)。もし私が1つを開かなければならないならば、私はただそれに何かをつけなければならない。 – Ash

関連する問題