2012-05-02 34 views
2

我有以下表“用户”(简化这个问题的目的)与非增量IDS(不是我设计的,但我不得不忍受它)SQL接着输入记录

userUUID        email 
---------------------------------------------------- 
44384582-11B1-4BB4-A41A-004DFF1C2C3  [email protected] 
3C0036C2-04D8-40EE-BBFE-00A9A50A9D81 [email protected] 
20EBFAFE-47C5-4BF5-8505-013DA80FC979 [email protected] 
... 

我们运行一个循环遍历表并将电子邮件发送给注册用户的程序。使用try/catch块,我在文本文件中记录失败记录的UUID。该程序然后停止并需要重新启动。

当程序重新启动时,我不想重发电子邮件到那些成功的,但从失败的记录开始。我假设这意味着,我需要处理在失败记录后创建的记录。

我该怎么做?

+0

你可以发布表的结构(即发布所有列)吗? – datagod

回答

3
  1. 排序的列(在这种情况下,我会建议userUUID
  2. where userUUID > 'your-last-uuid'
6

为什么不跟踪的地方(例如,另一个表,甚至在原来的BIT列表,称为“WelcomeEmailSent”或其他)UUID已被邮寄?那么不管你的程序死在哪里或者它处于什么状态,它都可以重新启动,并且始终知道它停止的地方。

+0

谢谢,这就是我们原来的样子,但现在我们正试图尽可能多地保留数据库。对于80,000条记录,在更新每个标志列之后,事务日志会变大(尽管我想我们只能更新失败列的标志)。使用这种方法,我们只需记录失败记录的ID,而不是别的。 – user460114

+0

@ user460114如果您要将其保留在数据库之外并绕过事务一致性,那么为什么不将它存储在另一个数据库中的表中,即处于简单恢复模式?就一致性而言,您不会失去任何内容,但其他数据库不会产生严重的日志影响。 –

+0

该程序只读取数据库以获取电子邮件地址。之后,不需要进一步的数据库交易。只要我们根据UUID列对查询进行排序,我们不应该错过任何迟来的记录。 – user460114