1

を使用して、1 つのクライアント データベースDB2からメイン データベースにデータをコピーしています。DB1SqlBulkCopy

DataTable dtTable = new DataTable();
sqlDB2DataAdapter.Fill(dtTable); //select * from tblOrdersDB2

SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlDB1Connection)
bulkcopy.DestinationTableName = "dbo.tblOrdersDB1";
bulkcopy.WriteToServer(dtTable);

INDEXを作成することで、db にバルクでデータを挿入する際に、重複する値がすべて挿入されなくなります。
問題は、すべての重複レコードが無視されている CSV ファイルを報告したいことです。
この重複レコードを達成するにはどうすればよいですか?それを行う簡単な方法はありますか?
ありがとうございました。

4

2 に答える 2

2

最初の SELECT で重複レコードをフィルタリングしてみませんか? 別のタスクとして、ユーザーの重複を選択して報告します。重複することは、実際には一括コピーとは別の問題です。

于 2012-12-14T05:29:25.393 に答える
1

これは助けになるかもしれません

class TableComparer : EqualityComparer<DataRow>
{
    public override bool Equals(DataRow c1, DataRow c2)
    {
        if (c1["field1"] == c1["field1"] &&
            c1["field2"] == c1["field2"])
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public override int GetHashCode(DataRow c)
    {
        int hash = 23;
        hash = hash * 37 + c["field1"].GetHashCode();
        hash = hash * 37 + c["field2"].GetHashCode();
        return hash;
    }
}

    TableComparer eqc = new TableComparer();
    var newValues = tempList.Rows.Cast<DataRow>().Distinct(eqc).ToList();

SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlDB1Connection)
bulkcopy.DestinationTableName = "dbo.tblOrdersDB1";
bulkcopy.WriteToServer(newValues);
于 2012-12-14T07:53:44.287 に答える