1

我有一种情况,我需要在同一时间段内从两个不同的 SQL Server 数据库中获取一系列对象。

因此,如果 DB1 有一个Car表,而 DB2 有一个Person表,我想得到所有CarsPersons达到一个时间点t

但是,我不想处理日期(我不想遇到闰秒问题和那种事情),幸运的是两个数据库都使用RowVersion列。理想情况下,我想使用这样的东西RowVersion作为表示时间点/特定全局状态的并发令牌(我的t),然后我可以比较记录。

不幸的是,RowVersion列是相对于数据库的,因此不同数据库之间没有可比性。

这里有更好的解决方案吗?我是否对不想使用日期反应过度?

建议表示赞赏:-)

4

2 回答 2

1

因为您谈论的是多个独立的系统,所以很遗憾您的选择是有限的。通过将所有日期时间存储在 GMT 中,您已经在正确的地方开始了。

除此之外,datetime它确实是此处使用的唯一合适的数据类型。是的,假设一个良好的公共时间同步,它将在多个系统之间关闭,相差几分之一秒。但是更新记录时的简单网络延迟也会导致时间差异,无论如何,即使时钟完全同步。

RowVersion不能帮助你,原因你已经注意到了。

唯一的另一种方法是在一个或另一个数据库中拥有一个“同步”表,该表与任一数据库中的记录相关(逻辑上,而不是“物理上”),并且具有您可以使用的通用日期时间或行版本。这会稍微增加查询的复杂性,但无论如何,您似乎已经在进行跨数据库查询。

于 2012-07-31T12:52:01.663 回答
0

您是否有特定的时间段要处理?如果是这样,也许可以将一个通用的“TimePeriod”表链接到每条记录,而不必处理日期?

于 2012-07-31T03:27:44.920 回答