1

我们正在考虑为我们的一些表实现双时间解决方案,因为它们必须记录应用程序时间和系统时间。

我知道 SQL 2016 仅对系统时间组件具有原生支持,因此我们会将表转换为临时表并修改我们现在拥有的内容以创建功能齐全的双时间解决方案。

我的问题是关于一致性。时态表的系统时间结束日期组件设置为 9999-12-31 23:59:59.9999999,所以我认为将我们的应用程序/有效时间结束日期也设置为 9999-12- 是个好主意31 23:59:59.9999999。

但是,有人问我“为什么我们不能将其设置为 NULL 以表示主表中的句点没有结束?”

那为什么呢?为什么 MS 选择使用 9999-12-31 23:59:59.9999999 而不是 NULL?

是否像使查询(可能)更容易编写一样简单?我猜 BETWEEN 对两个实际日期值的效果更好,但我想不出更多。

4

1 回答 1

1

这是因为这些列是期间列。(本质上你是对的)由于时间段是时间的定义,因此在逻辑上不应将其与 null 进行比较。这样 MSSQL 可以将时间值与时间值进行比较并跟踪所有更新(而不是与 null 和必须假设空点意味着缺乏数据但一个时期的结束。

周期开始列:系统记录该列中行的开始时间,通常表示为 SysStartTime 列。

期间结束列:系统记录该列中行的结束时间,通常在 SysEndTime 列中表示。 MSDN

于 2018-12-11T22:09:43.720 回答