【发布时间】:2016-01-14 19:02:38
【问题描述】:
我们正在从 SQL Server 2005 迁移到 2012。其中一项功能因此错误而失败
com.microsoft.sqlserver.jdbc.SQLServerException:不允许从数据类型 varbinary 到 datetime2 的隐式转换。使用 CONVERT 函数运行此查询。
我们使用 SQLJDBC driver 3.0 与 SQL Server 2012 进行通信。我发现当我们尝试将 NULL 值插入到 DATETIME 列(可为空)中时会发生此问题。但是在 2005 年也是如此。感谢您对此问题的任何帮助。
这是一个简单的INSERT 语句,使用 MyBatis ORM 从 Java 到 SQL Server 2012 失败:
Insert into temp_test (date1, name, date2) values ('2010-10-10 00:00:00.0','test',null)
当我们从我们的应用程序(使用 SQL JDBC 驱动程序)尝试时,此插入失败...但是相同的代码库在 SQL 2005 中没有任何问题。
【问题讨论】:
-
如果可能,请发MVCE,或者至少向我们提供尽可能多的代码和信息。
-
在初始线程中添加了其他详细信息...
-
请解释为什么您在问题中引用
DATETIME2,但您声明该列的类型为DATETIME。在 SQL Server 2008 中还引入了DATETIME2...但您声明您正在从 2005 年迁移到 2012 年?这不加起来。请澄清。 -
该错误消息也让我措手不及。表中的列是 DATETIME 但是当我们向 DB 发送空值时,SQLServer 2012 范式中正在发生 varbinary 到 datetime2 的隐式转换,因此我们看到此差异错误消息。
-
您是否尝试过我在回答中给出的建议?
标签: sql-server-2005 sql-server-2012 mybatis sqljdbc