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

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

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

解决方案

  1. 尝试用<if>标签判空,当值为空时,插入语句不带该字段。但是批量插入传入的是List,不好用<if>标签判断。不可行
  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() 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 来源:博客园 阿赫瓦里 数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型...
    _Nullptr阅读 4,429评论 0 3
  • 命名规范 库名、表名、字段名必须使用小写字母,并采用下划线分割MySQL有配置参数lower_case_table...
    swoft_阅读 3,838评论 0 0
  • 前言 很多时候总感觉数据类型很简单,但是真正用的时候确总是很犹豫,不知道用哪个好,仔细了解他们之间的区别能让我们更...
    smlrole阅读 13,168评论 0 2
  • 正确认识数据库 MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。 在2008年1月16...
    小白文_Vincent阅读 3,821评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 9,782评论 0 13