构建检查重复项的导入过程

时间:2010-12-01 20:15:05

标签: asp.net nhibernate

使用ASP.NET,我正在构建一个管理工具,需要一个函数来导入电子邮件地址列表。上传文件后,我想检查所提供的任何电子邮件地址的现有记录。对于不存在的电子邮件地址,我会使用我的DAO创建它们。

基本上我想:

  1. 接收电子邮件列表
  2. 检索现有电子邮件的数据
  3. 在db
  4. 中为新电子邮件创建数据
  5. 返回列表中所有电子邮件的完整数据。
  6. 由于我想知道预先存在哪些电子邮件,我首先想到的是查询表中的所有记录WHERE Email IN ('Email001FromFile', 'Email002FromFile', 'etc...'),但该列表可能包含数千个电子邮件地址,我不确定是否提供IN运营商的许多电子邮件地址都是个好主意。

    我还考虑过遍历列表并检查每封电子邮件的记录,但这可能会产生太多的查询。

    我的下一个想法是生成一个临时表来保存列表并修改IN子句以使用临时表,而不是明确的项列表,但这需要我直接执行SQL或存储过程,我因为我正在使用NHibernate来访问我的数据库,所以我不愿意这样做。

    虽然我使用的是ASP.NET(C#)和NHibernate,但任何特定的答案都会有所帮助,我真的只是在寻找有关如何处理这种情况的一般想法。

2 个答案:

答案 0 :(得分:2)

如果将现有的电子邮件加载到内存中不是一种选择,我可能会选择某种批量方法。转到你提到的IN查询,但只对n个电子邮件执行此操作。您可以将硬编码n设置为某个值,或者您可以将其作为新电子邮件总数的函数。

我不确定这种方法是否真的比执行一个单一的IN查询更快(有比我更多的数据库技能的人必须回答这个问题),但这样可以指出某种加载状态给用户。

答案 1 :(得分:0)

您是否正在处理重复的电子邮件?

您可以在表上放置一个UNIQUE约束,只允许输入一次电子邮件地址 - 然后捕获SQL将在您尝试插入重复项时抛出的异常。