Почему конечная дата во временной таблице является максимальным системным временем, а не просто NULL
Мы смотрим на реализацию битемпорального решения для нескольких наших таблиц, потому что они должны записывать как время приложения, так и системное время.
Я знаю, что в 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?
Это так просто, как сделать запросы (потенциально) легче писать? Я предполагаю, что МЕЖДУ лучше работает с двумя фактическими значениями даты, но я не могу думать о многом другом.
1 ответ
Это потому, что эти столбцы являются столбцами периода. (По сути, вы правы) Поскольку точка является определением времени, ее логически не следует сравнивать со значением NULL. Таким образом, MSSQL может сравнивать значения времени со значениями времени и отслеживать все обновления (в отличие от сравнения со значениями NULL и Принятие нулевых значений означает отсутствие данных, но конец периода.
Столбец начала периода: система записывает время начала строки в этом столбце, обычно обозначаемой как столбец SysStartTime.
Столбец окончания периода: система записывает время окончания строки в этом столбце, обычно обозначаемом в столбце SysEndTime. MSDN