You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA通过ADODB导入Excel日期到SQL Server报H80040E14错误如何处理

日期格式转换失败解决方案

你当前使用CAST(Start_Time AS datetime)直接转换失败,是因为SQL Server默认无法自动识别M/DD/YY hh:mm AM/PM这类含两位数年份、12小时制标记的非标准日期字符串,因此触发类型转换报错,可选择以下任意方案解决:

  • 方案1:SQL侧指定转换格式码
    直接使用SQL Server的CONVERT函数,指定对应格式码22即可完成转换,格式码22匹配mm/dd/yy hh:mi:ss AM/PM的输入结构,用法如下,替换原SQL语句中的CAST(Start_Time as datetime)即可:
    CONVERT(datetime, Start_Time, 22)
    
  • 方案2:VBA侧提前转成无歧义的标准日期格式
    若担心两位数年份的识别歧义(SQL Server默认规则为年份值小于50识别为20xx,大于等于50识别为19xx,可能不符合业务逻辑),可以在VBA读取Excel日期后,先转成ISO 8601标准格式字符串再拼接进INSERT语句:
    ' 读取Excel单元格日期值,转成SQL可直接识别的标准格式
    Dim standardStartTime As String
    standardStartTime = Format(Excel单元格对象.Value, "yyyy-mm-dd HH:mm:ss")
    ' 后续INSERT语句直接使用该变量,无需额外SQL转换
    
  • 方案3:使用参数化查询完全规避格式问题(推荐)
    批量导入场景优先选择该方案,既不需要处理格式转换,还能避免SQL注入风险,无需拼接SQL字符串,直接传递日期类型参数即可:
    Dim cmd As New ADODB.Command
    cmd.ActiveConnection = 你已初始化的ADODB连接对象
    cmd.CommandText = "INSERT INTO 目标表名 (start_time, 其他字段名) VALUES (?, ?)"
    ' 添加日期参数,直接传入从Excel读取的日期类型值
    cmd.Parameters.Append cmd.CreateParameter("@start_time", adDateTime, adParamInput, , Excel单元格对象.Value)
    ' 其他参数赋值操作...
    cmd.Execute
    

内容的提问来源于stack exchange,提问作者Paul Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:57:00