使用SSMA从Access 2003迁移至SQL Server 2019时部分表为空的原因及解决方法
Access 2003迁移至SQL Server 2019后部分表为空的原因及解决方法
可能的原因
- 数据类型不兼容:Access 2003里的
Memo、OLE Object这类特殊数据类型,和SQL Server 2019的类型不匹配,迁移工具转不动,直接跳过了数据导入;还有日期字段格式特殊的话,也会导致识别失败。 - 主键/索引有问题:原Access表没设主键,或者主键里有空值、重复值——SQL Server要求主键必须唯一非空,迁移工具只会建表结构,不会导数据。
- 迁移工具配置漏了:用SSMA或者导入导出向导的时候,没勾选部分表,或者在筛选设置里把数据给排除了。
- 权限或文件锁定:迁移用的SQL Server账号没足够的写入权限,数据插不进去;或者Access文件被别的程序打开着,读不了源数据。
- 表数据量太大或损坏:原表数据太多,迁移时超时卡断;或者Access表有隐性损坏(比如索引错了、记录坏了),工具读数据直接失败。
- 字符集不匹配:Access 2003默认字符集和SQL Server 2019的不一样,转换时出错,导致数据没导进去。
解决方法
- 修复数据类型映射:
- 用SSMA的话,先看数据类型映射报告,手动把
Memo改成VARCHAR(MAX)或NVARCHAR(MAX),OLE Object改成VARBINARY(MAX);日期字段映射成DATE或DATETIME2。 - 要是有特殊格式的字段,先在Access里清掉无效内容(比如日期字段里的非日期文本)再迁移。
- 用SSMA的话,先看数据类型映射报告,手动把
- 搞定主键/索引问题:
- 打开原Access库,给没主键的表加个唯一非空的主键;主键有重复或空值的,先删重复记录、补全空值,再重新迁移。
- 重新配置迁移工具:
- 重新跑导入导出向导,在“选择源表和视图”步骤里,确保要迁的表都勾上,别设数据筛选条件。
- 用SSMA的话,在“迁移设置”里确认勾了“迁移数据”,不是只迁表结构。
- 调整权限和文件状态:
- 给SQL Server账号开
db_owner或者datawriter权限;把所有打开Access库的程序关掉,确保文件能正常读取。
- 给SQL Server账号开
- 处理大表和损坏的表:
- 大表可以拆分数据分批迁,或者先在Access里压缩修复数据库(点“工具”→“数据库实用工具”→“压缩和修复数据库”)再迁。
- 表要是坏了,先在Access里把数据导出到新空表,用新表当迁移源。
- 统一字符集:
- 建SQL Server目标库时,指定和Access匹配的字符集(比如
SQL_Latin1_General_CP1_CI_AS);或者迁移前把Access的文本字段转成Unicode格式。
- 建SQL Server目标库时,指定和Access匹配的字符集(比如
内容的提问来源于stack exchange,提问作者srdjan sai
相关产品推荐
相关产品推荐

