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 回答