質問: 私はC#で`SqlBulkCopy`クラスを使用して、あるSQL Serverデータベースから別のSQL Serverデータベースにデータを高速にコピーしています。データベースは異なるサーバーにあり、そのデータテーブルにはPKがないため、プロセスが複雑になります。 問題は、元のデータベースからデータを選択するために使用しているクエリが重複する行を取得し、 `SqlBulkCopy`が宛先データベースに重複するレコードを挿入することを避けることができないことです。 `OutOfMemoryException`スローするため`SELECT *`使用できないため、 `SELECT TOP X *`を実行してそのデータを`DataTable`ロードし`DataTable` 。各`Datatable`では、C#を使用して重複レコードを削除できますが、次のTOP Xを選択すると、選択された最初の行は、前の`DataTable`あった最後の行と同じであり、 `DataTable`変数は常に同じで、リロードされます。 私は、私の場合には適用されないので、PKを作成せずに重複レコードを挿入しないようにしたい。高速コピーはシステム要件であるため、実際には`SqlBulkCopy`を使用する必要があります。なにか提案を?前もって感謝します!
回答: C#は使用しないでください。 SSMSでオリジナルデータベースを右クリックし、[タスク]を選択してから[スクリプトを生成]を選択します。必要なテーブルを選択し、ウィザードを使用して挿入スクリプトを生成します。次に、2番目のデータベースでこれらを実行します。 この操作を繰り返す必要がある場合は、2つのSQL Serverインスタンス間にリンクサーバーを設定してから、 ストアドプロシージャ内のINSERTステートメントを1つずつ書き込むことができます 。必要に応じてこのストアドプロシージャを実行したり、C#から呼び出すことができます。 定期的に実行したい場合は、データベース上でジョブを.aspx)設定することができます.aspx) 。