Почему конечная дата во временной таблице является максимальным системным временем, а не просто NULL - PullRequest
0 голосов
/ 12 декабря 2018

Мы рассматриваем реализацию битемпорального решения для нескольких наших таблиц, поскольку они должны записывать как время приложения, так и системное время.

Я знаю, что в 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 Ответ

0 голосов
/ 12 декабря 2018

Это потому, что эти столбцы являются столбцами периода.(По сути, вы правы) Поскольку точка является определением времени, ее логически не следует сравнивать со значением NULL. Таким образом, MSSQL может сравнивать значения времени со значениями времени и отслеживать все обновления (в отличие от сравнения со значениями NULL идопущение, что нулевые числа означают отсутствие данных, но конец периода.

Столбец начала периода: система записывает время начала строки в этом столбце, обычно обозначаемом как столбец SysStartTime.

Столбец окончания периода: система записывает время окончания строки в этом столбце, обычно обозначаемом в столбце SysEndTime. MSDN

...