如何将Bacpac文件导入已存在的Azure SQL DB数据库
问题根因
你选错功能入口了。右键数据库节点调出的「导入数据」选项是SSIS导入导出向导,这个工具是用来在Excel、CSV、跨实例数据库等异构数据源之间同步表数据的,根本不支持Bacpac文件的导入操作,你在这个界面里找不到对应选项是正常的。
另外先明确一个核心规则:Bacpac是包含源库全量架构、表数据的完整逻辑备份包,官方原生的Bacpac导入逻辑默认要求创建全新数据库作为导入目标,本身就不支持直接向已经存在的数据库写入内容。
具体操作方法
方法1:使用正确的Bacpac导入入口(最简单,适配绝大多数场景)
如果你提前创建db2只是为了指定库名,没有给db2配置专属文件组、权限、分区这类自定义设置,完全没必要提前手动建库,按以下步骤操作就行:
- 在SSMS对象资源管理器里,找到目标实例下的「数据库」根文件夹(不要点进任何具体的现有数据库)
- 右键点击「数据库」文件夹,选择「导入数据层应用程序」(注意和你之前点的「导入数据」是完全独立的两个功能,别再点错)
- 跟着向导走,第一步选择你本地存的db1对应的Bacpac文件
- 到部署设置页面时,手动把默认生成的目标数据库名改成
db2,按需调整数据文件、日志文件的存储路径 - 剩下的步骤直接点下一步完成即可,向导会自动创建名为db2的数据库,把Bacpac里的全量架构和数据都导进去。
方法2:适配必须使用提前创建好的db2的场景
如果你预先创建的db2已经配置好了专属参数,不能删库重建,按下面的流程走最稳:
- 先按方法1的流程把Bacpac导入为一个临时库,比如命名为
db1_temp - 确认临时库的架构、数据完整无误后,用SSMS自带的架构对比、数据对比功能,或者直接用导入导出向导,把
db1_temp里的表、视图、存储过程、全量数据同步到你提前建好的db2里 - 校验db2的数据和源库完全一致后,删掉临时库
db1_temp就完成了。
避坑提醒
别信网上改配置强行把Bacpac导入现有库的教程,很容易触发对象已存在、权限不匹配之类的玄学报错,远不如先导临时库再同步的方式稳定。
内容的提问来源于stack exchange,提问作者John11
相关产品推荐
相关产品推荐

