在数据迁移场景中,经常会遇到需要将Access数据库文件导入到Mssql数据库的需求,Access文件分为早期的mdb格式和后续的accdb格式,两种格式的导入方式略有不同,下面分别介绍具体的操作方法。

准备工作
在导入数据前,需要先确认本地已安装对应版本的Access数据库引擎,mdb格式需要Access 2003及以下版本的引擎,accdb格式需要Access 2007及以上版本的引擎,如果未安装可以在微软官方渠道下载对应驱动。同时需要确认Mssql服务处于运行状态,且你有目标数据库的写入权限。
通过SSMS图形化界面导入
这是最常用也最直观的导入方式,操作步骤如下:
- 打开SQL Server Management Studio,连接到目标Mssql实例,找到要导入数据的目标数据库,右键选择任务-导入数据。
- 在数据源选择界面,选择Microsoft Access,点击浏览按钮选择本地的Access文件,如果是accdb格式,需要确保已安装对应引擎,否则会提示无法识别文件。
- 目标选择Microsoft OLE DB Driver for SQL Server,填写服务器地址、身份验证方式和目标数据库信息,点击下一步。
- 选择要导入的表或者编写查询语句筛选需要的数据,设置好字段映射关系,确认无误后点击完成即可执行导入。
使用SQL语句导入
如果需要通过脚本自动化执行导入操作,可以使用OPENROWSET函数实现,示例代码如下:
-- 导入mdb格式Access文件,假设文件存放在D盘根目录,文件名为test.mdb,要导入的表为access_user
SELECT * INTO mssql_user
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'D:\test.mdb';'admin';'',
'SELECT * FROM access_user')
-- 导入accdb格式Access文件,假设文件存放在D盘根目录,文件名为test.accdb,要导入的表为access_order
SELECT * INTO mssql_order
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'D:\test.accdb';'admin';'',
'SELECT * FROM access_order')注意使用OPENROWSET前需要先开启Mssql的Ad Hoc Distributed Queries功能,执行以下代码开启:
-- 开启Ad Hoc Distributed Queries sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
常见问题及解决方法
- 驱动缺失问题:如果导入时提示找不到对应的OLE DB提供程序,需要安装对应版本的Access数据库引擎,注意如果Mssql是64位,需要安装64位的引擎,32位Mssql安装32位引擎。
- 字段类型不兼容:Access的自动编号类型导入到Mssql后默认为int类型,如果Access表中存在Mssql不支持的字段类型,可以在导入时修改字段映射,将不兼容的字段转为Mssql支持的对应类型。
- 文件被占用:导入时如果提示文件被占用,需要关闭所有打开该Access文件的程序,包括Access软件和其他可能读取该文件的进程。
不同格式导入差异对比
两种格式Access文件导入的核心差异如下:
| 对比项 | mdb格式 | accdb格式 |
|---|---|---|
| 所需OLE DB驱动 | Microsoft.Jet.OLEDB.4.0 | Microsoft.ACE.OLEDB.12.0及以上 |
| 支持Access版本 | Access 97/2000/2003 | Access 2007及以上 |
| 图形化导入兼容性 | 需安装旧版引擎 | 需安装新版引擎 |