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

SSMA迁移Access至SQL Server时Date/Time转DateTime报错

问题根因

报错核心是两个问题叠加:

  • SQL Server的datetime类型合法取值范围为1753-01-01 00:00:00到9999-12-31 23:59:59,而datetime2支持的范围是0001-01-01到9999-12-31。Access自身Date/Time类型的存储逻辑是用1899-12-30为基准点的双精度浮点数,支持的日期范围覆盖100-01-01到9999-12-31。
  • 你贴出的datetime2默认映射迁移结果已经出现明显的解析错误:Access中日期序列值42281对应的实际日期是2015-10-02,迁移后却显示为2005-02-01,说明SSMA没有正确识别你源数据的dd/mm/yyyy日期格式,把日月位置和月日位置搞混了,错位计算后生成了早于1753年的非法日期值,写入datetime字段时就触发溢出报错。
  • Access前端把datetime2识别为短文本,是旧版Access ODBC驱动的兼容问题:2016之前版本的Access默认驱动不支持datetime2类型,会自动将其转换为文本格式展示,和迁移逻辑无关。
解决步骤
  • 第一步:预处理Access源表日期数据
    打开Access源库,对所有日期字段做格式统一和合法性校验,执行以下查询找出异常值:
    SELECT * FROM 你的业务表名
    WHERE IsDate([Datefilecreated]) = False
       OR IsDate([Datemodified]) = False
       OR IsDate([DateChangeTeamID]) = False
    
    把查询到的假日期、格式错位的值统一修正为标准dd/mm/yyyy格式的合法日期,空值统一标记为NULL,避免SSMA解析时出错。
  • 第二步:调整SSMA迁移配置
    不要直接全局替换类型映射,打开SSMA的项目类型映射设置:
    1. 将Access Date/Time类型的目标映射设置为datetime
    2. 在迁移设置中明确指定源日期格式为dd/mm/yyyy,关闭自动区域格式识别
    3. 开启范围校验规则,设置遇到小于1753-01-01的异常日期时自动写入NULL,避免迁移任务中断
  • 第三步:解决前端识别问题
    迁移完成后,卸载旧版SQL Server ODBC驱动,安装SQL Server Native Client 11.0或更高版本驱动,重新在Access前端链接SQL Server表,datetime类型会被正常识别为日期格式,不会再显示为短文本。如果后续需要使用datetime2类型,给Access安装2016版及以上运行时、或打KB3114379兼容补丁即可正常识别。
  • 第四步:迁移后校验
    迁移完成后抽样比对源表和目标表的日期值,确认没有出现年份、日月错位的问题,比如原表2011年的记录迁移后对应日期仍为2011年,即可正常上线使用。

内容的提问来源于stack exchange,提问作者Hariharan Iyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:42:13