在批量复制到数据库之前获取重复记录

时间:2012-12-14 05:15:22

标签: c# sql sql-server-2008 datatable duplicate-data

我现在使用DB2将数据从一个客户端数据库DB1复制到主数据库SqlBulkCopy

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

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

通过创建INDEX,当我将批量数据插入数据库时​​,不会插入所有重复值 问题是我想报告一个被忽略的所有重复记录的CSV文件 如何实现这些重复记录?有一种简单的方法吗?
谢谢。

2 个答案:

答案 0 :(得分:2)

为什么不在初始SELECT期间过滤我们的重复记录?并且作为单独的任务选择并报告用户的重复项。 重复的东西确实是批量复制的一个单独的问题。

答案 1 :(得分: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);