我有一个需要不断处理的事件列表。该进程会处理该事件一段时间,然后它需要再次处理。这意味着,对于每个事件,我最终都会得到一个日期范围列表,在该列表中事件被“处理”,任何差距都意味着该事件当时处于未处理状态。为此,我使用两个表:
表进程
ProcessID int PK NOT NULL
EffectiveDays int NOT NULL
表处理
EventID nvarchar(128) NOT NULL
ProcessID int FK REFERENCES Processes NOT NULL
DateProcessed int NOT NULL
EventID 是根据 SQL 查询的结果以标准方式动态生成的,以确保它在运行中保持不变。
我希望能够使用此签名实现一个方法(有时需要在循环中调用它):
bool Event.WasProcessed(DateTime AsOf)
对于给定的日期,我需要能够查询事件所处的状态(处理与否)。所以我需要确定提供的日期是否在任何一个日期范围内(可以重叠)。
我什至不确定是用 SQL 还是代码运行这个查询。查询有时需要在任意一系列事件上运行(每个事件我都由一个包含事件的对象和一个处理列表来表示),因此在 SQL 中运行它可能意味着对数据库的影响很大。另一方面,SQL 在查询方面通常更快。另一方面,这个类似的问题表明无论如何都需要基于光标的解决方案。
任何指针都会受到赞赏,即使它们只是更好的搜索字符串。(谷歌搜索任何日期范围问题似乎需要一些技巧。)