如何通过SSMS将MS Access 2016数据库完整导入SQL Server
Access 2016 数据库完整迁移至SQL Server 操作方案
一、解决SSMS导入向导找不到.accdb格式选项的问题
- 先安装和SSMS位数匹配的Microsoft Access Database Engine 2016 Redistributable组件,SSMS默认是32位版本,优先安装32位的引擎组件。注意:安装前需关闭所有Office相关进程,否则会出现安装失败的问题
- 安装完成后重启SSMS,重新打开导入导出向导,数据源列表就能找到
Microsoft Access (Microsoft Access Database Engine)选项,选择后即可加载.accdb格式的Access 2016文件。 - 如果仍找不到对应选项,可直接启动32位导入导出工具:打开路径
C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\Binn\DTSWizard.exe启动向导即可。
二、完整迁移表结构、数据及表间关系的步骤
- 第一步:使用导入导出向导迁移基础表和数据:选择数据源为Access 2016文件,目标为你要导入的SQL Server实例,勾选「复制一个或多个表或视图的数据」,全选所有Access表后执行导入,完成后所有表的字段结构、数据都会同步到SQL Server中。
- 第二步:从Access端导出表关系的SQL脚本:打开待迁移的Access数据库,按
Alt+F11打开VBA编辑器,插入新的模块,粘贴以下代码并运行:
Sub ExportRelationshipsToSQL() Dim rel As Relation Dim fld As Field Dim sqlStr As String For Each rel In CurrentDb.Relations ' 跳过系统内置关系 If Left(rel.Name, 4) <> "MSys" Then sqlStr = sqlStr & "ALTER TABLE " & rel.ForeignTable & " ADD CONSTRAINT " & _ "[" & rel.Name & "] FOREIGN KEY (" For Each fld In rel.Fields sqlStr = sqlStr & "[" & fld.Name & "]," Next fld sqlStr = Left(sqlStr, Len(sqlStr) - 1) & ") REFERENCES " & rel.Table & "(" For Each fld In rel.Fields sqlStr = sqlStr & "[" & fld.ForeignName & "]," Next fld sqlStr = Left(sqlStr, Len(sqlStr) - 1) & ");" & vbCrLf & vbCrLf End If Next rel ' 脚本会输出到VBA的立即窗口,按Ctrl+G可调出立即窗口复制脚本 Debug.Print sqlStr End Sub
- 第三步:在SSMS中打开目标数据库的查询窗口,粘贴第二步导出的SQL脚本并执行,即可完整重建所有Access端配置的表间外键关系。
- 若需要迁移Access中的查询、宏等其他对象,可手动将Access查询逻辑转换为SQL Server的视图或存储过程即可。
内容的提问来源于stack exchange,提问作者N Byington
相关产品推荐
相关产品推荐

