记:报错不允许从数据类型 varbinary 到 datetime2 的隐式转换。请使用 CONVERT 函数来运行此查询

场景:在做mybatis批量插入的时候,报了这个错。但是单条插入的时候没问题。
分析

  1. 先把批量插入的SQL详细看了一遍,没问题。
  2. 把批量插入和单条插入的SQL对比,发现单条插入的SQL是有用标签判空的,当值为空的时候,插入的SQL不带这个字段。
    问题定位:字段类型为datatime2的字段,不允许插入null值。

解决方案

  1. 尝试用标签判空,当值为空时,插入语句不带该字段。但是批量插入传入的是List,不好用标签判断。不可行
  2. 把数据库字段类型由datatime2改为datatime,xml文件的SQL参数中增加jdbcType = TIMESTAMP,例如:#{item.time, jdbcType = TIMESTAMP}。可行(适用于精度要求不那么高的情况)

SQLserver datatime 和datetime2区别
DateTime字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fff ,3个f,精确到1毫秒(ms),示例 2014-12-03 17:06:15.433 。

DateTime2字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fffffff ,7个f,精确到0.1微秒(μs),示例 2014-12-03 17:23:19.2880929 。

如果用SQL的日期函数进行赋值,DateTime字段类型要用 GETDATE() ,DateTime2字段类型要用 SYSDATETIME() 。

你可能感兴趣的:(记:报错不允许从数据类型 varbinary 到 datetime2 的隐式转换。请使用 CONVERT 函数来运行此查询)