批量插入c#datatable到sql server - 高效检查重复

时间:2014-02-19 00:38:12

标签: c# sql-server linq

我希望将许多文件导入数据库(使用自定义业务逻辑阻止使用简单的SSIS包)。

问题的高级描述:

  • 将现有的sql数据拉入DataTable(~1M行)
  • 将excel文件读入一个块中的二维数组
  • 逐行验证字段(自定义逻辑)
  • 检查现有DataTable中的重复项
  • 插入DataRow
  • 批量将DataTable插入SQL表

我的方法有问题: 必须检查每一行的重复项,我认为调用远程服务器来利用SQL会太慢,所以我选择了LINQ。查询很简单,但数据集的大小会导致它爬行(在此查询中花费90%的执行时间来检查字段)。

var existingRows = from row in recordDataTable.AsEnumerable()
                                 where row.Field<int>("Entry") == entry
                                 &&    row.Field<string>("Device") == dev
                                 select row;
bool update = existingRows.Count() > 0;

还有哪些其他方法可以更有效地检查重复项?

1 个答案:

答案 0 :(得分:1)

使用linq,每次检查重复时,它基本上会对~1M记录进行for循环。

最好将数据放入字典中,以便查找内存索引。