Функция преобразования SQL Server 2016 с нулевым типом даты отличается от SQL Server 2008 R2 - PullRequest
1 голос
/ 07 ноября 2019

У меня возникла проблема, связанная со встроенной функцией SQL Server CONVERT.

После перехода с SQL Server 2008 R2 на 2016 г. в этой миграции обнаружилось одно отличие.

Я прошел через функцию CONVERT из последней версии MS Doc, она вернет ноль, когда предоставленный параметр типа данных будет нулевым. Интересно, почему SQL Server 2008 R2 работает нормально ....

В SQL Server 2008 R2:

SELECT CONVERT (DATE, GETDATE(), NULL) 

возвращает значение даты.

В SQL Server 2016:

SELECT CONVERT (DATE, GETDATE(), NULL) 

возвращает NULL.

PS: возвращение NULL - правильное поведение, но мне интересно, почему более ранние версии возвращали значение даты.

1 Ответ

2 голосов
/ 07 ноября 2019

Унаследованное поведение этого критического изменения может контролироваться уровнем совместимости базы данных. Уровень совместимости 100 (SQL Server 2008) будет возвращать ненулевое значение.

Почему, кажется, Microsoft определила, что NULL является правильным значением для возврата со стилем NULL и соответствующим образом изменила поведение. Более старый уровень совместимости базы данных позволяет избежать взлома кода до тех пор, пока он не будет исправлен.

...