Azure SQL Server导入.bacpac遇SQL72014错误,求解决建议
解决方案
核心结论
- 绝对不能执行
UPDATE sys.configurations:Azure SQL DB是托管服务,系统目录表为只读,执行该语句会直接报错Ad hoc updates to system catalogs are not allowed,且实例级的contained database authentication配置在Azure SQL DB中根本不存在。 - 问题根源是目标数据库未启用部分包含模式——Azure SQL DB的包含数据库设置是数据库级属性,而非实例级配置。
具体解决步骤
1. 检查目标数据库的包含模式
执行以下查询确认当前状态:
SELECT containment, name FROM sys.databases WHERE name = '你的目标数据库名';
- 返回
0:未启用包含模式(默认状态) - 返回
1:已启用部分包含模式
2. 启用目标数据库的部分包含模式
情况一:目标数据库尚未创建
创建数据库时直接指定包含模式:
CREATE DATABASE [目标库名] ( EDITION = 'GeneralPurpose', -- 根据需求选择版本,如Basic、Standard等 SERVICE_OBJECTIVE = 'GP_Gen5_2' -- 对应服务层级,按需调整 ) WITH CONTAINMENT = PARTIAL;
情况二:目标数据库已存在
直接修改数据库属性:
ALTER DATABASE [目标库名] SET CONTAINMENT = PARTIAL;
注意:执行该操作时需确保数据库无长时间运行的事务,Azure SQL DB会自动处理锁机制,无需手动切换单用户模式。
3. 处理SQL72012警告(文件组冲突)
该警告是因为目标数据库已存在[data_0]、[log]等文件组,导入bacpac时无法覆盖。解决方式:
- 若目标数据库无重要数据,先删除目标数据库,再重新创建带包含模式的空库后执行导入。
- 若需保留目标数据库,导入时确认工具(如Azure Portal、SSMS)的“覆盖现有数据库”选项已勾选。
验证
完成上述设置后,重新执行bacpac导入操作,即可解决SQL72014错误,同时避免SQL72012的文件组冲突问题。
内容的提问来源于stack exchange,提问作者rAJ
相关产品推荐
相关产品推荐

