質問: SQLBulkCopyを使用してバルクデータをSqlテーブルにアップロードしています。このテーブルにはID列としての列IDが含まれています。それはあなたが知っているように二重のレコードを許可しません.. 私がSQLBulkCopyによって挿入する10行を持っているConsoder、その10レコードの中に2行の行があります... 私の質問です:SQLBulkCopyを使用して行を挿入中に重複行をスキップする方法はありますか?
回答: SqlBulkCopyは、非常に制限されたエラー処理機能を備えています。デフォルトでは、制約をチェックすることさえありません。 しかし、その速い、本当に本当に速い。 重複キーの問題を回避し、バッチ内の重複する行を特定する場合は、 1つのオプションは次のとおりです。 * トラン * テーブルのtablockxをつかみ、現在の「ハッシュ」の値をすべて選択し、HashSetでチャックします。 * 重複を除外してレポートします。 * データを挿入する * コミットトラン 巨大なセットを挿入していて、テーブルの初期データのサイズがあまりにも大きくない場合、このプロセスは効果的に機能します。 あなたは問題の文脈の残りを含めるためにあなたの質問を拡大してください。 **EDIT** もう少し文脈があるようになったので、ここで別の方法を考えてみましょう。 * 一括挿入を一時テーブルに入れます。 * 直列化可能なトランを開始する * 送信先テーブルにすでにあるすべての一時行を選択...レポート * テンポラリテーブルのデータを実テーブルに挿入し、ハッシュの左結合とすべての新しいローの挿入を実行します。 * トラン そのプロセスは往復では非常に軽く、スペックは非常に高速になるはずです。