0


0

BCPユーティリティでSQL Serverのテーブルを更新できません

展開手順の一部として、データを事前に入力するデータベーステーブルがあります。 列の1つがバイナリ(バイナリシリアル化オブジェクト)であるため、データをテーブルにコピーするために「+ BCP +」を使用します。

これまでのところこれは非常にうまく機能しましたが、今日、このテクニックを「+ Windows Server 2008+」マシンで初めて試し、すべての列が更新されていないことに気付きました。 通常、この操作の一部として挿入される「31行」のうち、実際に「バイナリ列」が正しく入力されたのは「2行」のみです。 他の29行の `+ binary column +`には、単にnull値がありました。 これは、このような問題が発生した最初の状況であり、これは同じです .dat file that we use for all of our deployments.

他の誰かが以前にこの問題に遭遇したことがあるか、または問題が何であり得るかに関して何らかの洞察を持っていますか?

事前に感謝します、ジェレミー

1 Answer


0


私は、あなたがテキストとしてダンプするのに-cか-wを使っていて、それが好きではない文字の特定の組み合わせをチョークしていて、NULLにくっついていると思います。 フォーマットファイルがない場合、これはネイティブモードでも発生する可能性があります。 次を試して、それが役立つかどうかを確認してください。 (明らかに、サーバーとログインスイッチを自分で追加する必要があります。)

bcp MyDatabase.dbo.MyTableフォーマットnul -f MyTable.fmt -n bcp MyDatabase.dbo.MyTable out MyTable.dat -f MyTable.fmt -k -E -b 1000 -h "TABLOCK"

これにより、テーブルデータはフォーマットファイル、NULL、およびID値を使用してストレートバイナリとしてダンプされ、すべてが確実に整列するようになります。 さらに、データダンプを最適化するために1000のバッチを使用します。 それを元に戻すには:

MyTable.dat内のbcp MySecondData.dbo.MyTable -f MyTable.fmt -n -b 1000

…​which will use the format file, data file, and set batching to 少し速度を上げます。 それ以上の速度が必要な場合は、BULK INSERT、FirstRow / LastRow、および並行してロードする方法を検討する必要がありますが、それはこの質問の範囲を超えるものです。 :)