5

据我所知,根据这张图表,从 VARBINARY 到 DATE 的隐式转换应该没问题。但是,当我尝试以下代码时,SQL Server 会响应“不允许从数据类型 varbinary(max) 到日期的隐式转换。请使用 CONVERT 函数运行此查询。”

CREATE TABLE [dbo].[CONVERSION_TEST](
[mydate] [date] NULL
) ON [PRIMARY]

GO


declare @bin varbinary(MAX) = NULL
insert into conversion_test values (@bin)

我在 SQL Server 2012(版本 11.0.3128)上运行它。

4

1 回答 1

4

刚刚找到这个连接帖子:

微软连接

其中有来自微软的以下声明:

由 Microsoft 于 2008 年 5 月 3 日 13:23 发表 经过认真讨论,我们认为当前的设计很好,特别是考虑到它不是一个有趣的场景,并且我们已经支持新日期/时间类型的显式转换。

另一方面,我们也认为这不一定是一件好事,因为我们支持对现有类型的太多隐式转换。与二进制的转换是一件危险的事情,需要显式转换是有意义的。不幸的是,ALTER TABLE 行为与隐式转换相关,但您始终可以通过创建新列、发出更新,然后删除旧列(如果这是您担心的主要情况)来解决它。

因此,如果没有强烈反对,我们将执行以下操作: - 修复 BOL 以表明不支持从二进制/varbinary 到新日期/时间类型的隐式转换 - 将其关闭为“按设计”

谢谢

因此,他们似乎决定禁止这种隐式转换,但不更新该图。

于 2013-08-16T09:06:37.180 回答