SqlBulkCopyを使用して大量のデータを挿入しています。データのソースに重複した行が含まれている可能性があります。私は宛先テーブルに一意性のインデックスを持っています。
最初に複製された行が表示されると、SqlBulkCopyは例外をスローし、内部トランザクションをロールバックします。例外を無視して挿入し続けてほしい。(例外が重複した行の場合のみ)。
この問題についていくつか質問がありますが、それらはすべてレポートの重複行を探しています。私はそれらを気にしません。
SqlBulkCopyを使用して大量のデータを挿入しています。データのソースに重複した行が含まれている可能性があります。私は宛先テーブルに一意性のインデックスを持っています。
最初に複製された行が表示されると、SqlBulkCopyは例外をスローし、内部トランザクションをロールバックします。例外を無視して挿入し続けてほしい。(例外が重複した行の場合のみ)。
この問題についていくつか質問がありますが、それらはすべてレポートの重複行を探しています。私はそれらを気にしません。
一括挿入を行う前に問題を修正してください。一括挿入は、このようなものを処理しないように明確に定義されています。そのために、SQL Server をより高速な一括挿入モードにしますが、制限があります。すべてのキー違反は、挿入前に処理する必要があります。
あなたがしたいことは、ステージングテーブルに挿入し(ダブルは許可されています)、次にメインテーブルにMERGEします(MERGEコマンドを使用)。
これは、SqlBulkCopy のトレードオフの 1 つです。クリーンなデータがあることがわかっている場合は、これを使用します。このようなきれいなデータがない状況でエラーを適切に処理できるようにする必要がある場合は、他のアプローチが「より良い」ものです (ただし、パフォーマンスとのトレードオフです)。
あなたの他の質問に続いて、 SqlDataAdapter アプローチは、このようなエラーが発生した場合にプロセスを続行できるように設定できる ContinueOnError プロパティがあるため、この機能を提供します-非常に便利です。私はこのアプローチを、あまりきれいではない/潜在的に問題のある .NET のデータを処理する必要があるときに使用します。しかし、以前にリンクしたように、パフォーマンス コストが表示されます。
絶対的なパフォーマンスが必要で、分離しておくという元の要件を満たすには、DB にロードする前にデータを重複排除する必要があります。または、TomTom が提案したようなアプローチを使用します