我有一种情况需要在同一段时间内从两个不同的SQL Server数据库中获取一系列对象。
因此,如果DB1有一个Car
表,并且DB2有一个Person
表,那么我想让所有Cars
和Persons
达到某个时间点{{ 1}}。
但是,我不想处理日期(我不想遇到闰秒问题和那种事情),幸运的是两个数据库都使用t
列。理想情况下,我想使用像RowVersion
这样的东西作为表示时间点/特定全局状态的并发标记(我的RowVersion
),然后我可以将记录与之比较。
不幸的是,t
列与数据库相关,因此在不同数据库之间无法比较。
这里有更好的解决方案吗?我是否反应过于不想使用日期?
建议赞赏: - )
答案 0 :(得分:1)
因为您正在谈论多个独立的系统,所以您的选择很不幸。通过将所有日期时间存储在GMT中,您已经开始在正确的位置。
除此之外,datetime
实际上是这里唯一适用的数据类型。是的,假设一个良好的,共同的时间同步,它将在多个系统之间关闭,只需几分之一秒。但是,即使时钟完全同步,更新记录时的简单网络延迟也会导致时间差异。
RowVersion
无法帮助您,因为您已经注意到了。
唯一的另一种方法是在一个或另一个数据库中有一个'sync'表,它与任一数据库中的记录相关(逻辑上,不是“物理上”),并且具有可以使用的公共日期时间或行转换。这会增加查询的复杂性,但无论如何,您似乎已经在进行跨数据库查询。
答案 1 :(得分:0)
您是否有特定的时间段?如果是这样,也许一个共同的“TimePeriod”表可以链接到每个记录而不必处理日期?