SQL Server 2016 日期类型为空的转换函数不同于 SQL Server 2008 R2

SQL Server 2016 Convert function with null date type is different from SQL Server 2008 R2

我遇到了有关 SQL 服务器内置函数 CONVERT 的问题。

从 SQL Server 2008 R2 迁移到 2016 后,在这次迁移中发现一处差异。

我已经通过最新的 MS Doc 中的 CONVERT 函数,当提供的数据类型参数为 null 时,它将 return null。我想知道为什么 SQL Server 2008 R2 工作正常....

在 SQL Server 2008 R2 中:

SELECT CONVERT (DATE, GETDATE(), NULL) 

return一个日期值。

在 SQL 服务器 2016 中:

SELECT CONVERT (DATE, GETDATE(), NULL) 

returns NULL.

PS:returning NULL 是正确的行为,但我想知道为什么早期版本 returned 一个日期值。

此重大更改的遗留行为可由数据库兼容级别控制。兼容级别 100(SQL Server 2008)将 return 一个非空值。

至于为什么,Microsoft 似乎确定 NULL 是具有 NULL 样式的 return 的正确值,并相应地更改了行为。较旧的数据库兼容性级别提供了一种避免破坏代码的方法,直到它可以被修复。