导入Azure .bacpac文件至SQL Server遇错误,寻求技术协助
Bacpac导入SQL Server问题解决方案
针对SQL72012警告:目标库文件组未被删除
勾选“为目标数据库中存在但源中不存在的对象生成删除语句”仅会处理数据库对象(表、视图、存储过程等),而[-Production_Data]、[Production_Log]属于数据库存储文件组,不在该选项的处理范围内。解决步骤:
- 确认这些文件组未被任何数据库对象(如分区表)引用:
SELECT f.name AS FileGroupName, o.name AS ObjectName FROM sys.filegroups f LEFT JOIN sys.data_spaces ds ON f.data_space_id = ds.data_space_id LEFT JOIN sys.indexes i ON ds.data_space_id = i.data_space_id LEFT JOIN sys.objects o ON i.object_id = o.object_id WHERE f.name IN ('Production_Data', 'Production_Log') - 若未被引用,先删除文件组对应的物理文件:
ALTER DATABASE Production REMOVE FILE Production_Data; ALTER DATABASE Production REMOVE FILE Production_Log; - 再删除文件组:
ALTER DATABASE Production REMOVE FILEGROUP Production_Data; ALTER DATABASE Production REMOVE FILEGROUP Production_Log;
针对SQL72014、SQL72045外键约束冲突错误
错误原因是AuthorizationEvents表中存在AuthorizationId值,在Authorizations表的Id列中无匹配记录,导致启用外键约束时触发冲突。解决步骤:
- 定位冲突数据:
SELECT ae.* FROM dbo.AuthorizationEvents ae LEFT JOIN dbo.Authorizations a ON ae.AuthorizationId = a.Id WHERE a.Id IS NULL; - 根据业务规则处理冲突数据:
- 直接删除无效记录:
DELETE FROM dbo.AuthorizationEvents WHERE AuthorizationId NOT IN (SELECT Id FROM dbo.Authorizations); - 补充缺失的
Authorizations记录:根据冲突的AuthorizationId值插入对应数据到Authorizations表
- 直接删除无效记录:
- 重新启用约束:
ALTER TABLE [dbo].[AuthorizationEvents] WITH CHECK CHECK CONSTRAINT [FK_AuthorizationEvents_AuthorizationId_Authorizations_Id]; - 若要避免导入时触发该问题,可在导入前调整选项:
- 取消“启用约束检查”选项,完成数据导入后修复冲突数据,再手动启用所有约束
- 使用
SqlPackage.exe导入时添加参数:/p:DisableIndexesAndConstraintsForDataPhase=true
内容的提问来源于stack exchange,提问作者Lg35
相关产品推荐
相关产品推荐

