質問: 私たちはテーブルに大量のレコード(約2〜3百万)を挿入するという要件があります。しかし、私たちは、後で参照できるように、主キー、外部キーおよび非ヌル違反の無効なレコードを別のエラー・テーブルに検証し、分離する必要があります。私の研究では、SQLサーバーの一括挿入は挿入にはうまくいくが、悪いデータレコードをフィルタリングする最良の方法を理解することはできない。間にステージングテーブルを持つことは助けになりますか?ステージングテーブルに対していくつかのキューを使用して違反をチェックすることもできますが、実際のテーブルに、別のインサートを挿入するか、またはマージするかのどちらかを使用して良いレコードをロードする必要があります。私はそれが2倍の挿入を行うのに似ているので心配です。 私は大量の挿入を行うために.net sqlbulkcopyを使用する予定です。また、明確なエラー報告もありません。 誰かがより効率的なソリューションを教えてくれる? 編集:このアプローチが唯一の解決策であれば、2番目のインサートにはどのような方法が最適だと思いますか?挿入されていますか...選択かマージですか?彼らはBULK INSERTの効率とスピードにマッチしますか?それとも他に良い選択肢がありますか? ありがとう!
回答: 個人的に私は大量の2 / 3Mレコードを考慮しませんでした。数秒でデータが必要な場合を除き、Single(Non-Bulk)インサートが適切に機能します。 私がsrcのデータ品質について心配している場合は、最初にstgテーブルにロードしてから「Soft RI」を実行することをお勧めします.SQLを使用してPK、UQ、FKなどを確認してください。数値/非数値型または悪い日付型の問題が心配な場合は、すべての列に対してStgテーブルVARCHAR(8000)を作成し、テーブルから読み込むときにTRY_CONVERTを使用します。 データがSTGに入ると、適切な行のみを簡単にフィルタリングし、不良行を詳細にレポートできます。