使用SSMS生成.bacpac文件后还原数据库遇SQL72014、SQL2045错误求助
问题解决:Bacpac还原时SQL72014与SQL2045错误处理
问题描述
- 使用SSMS创建的.bacpac文件还原数据库时失败,触发以下错误:
导入包失败。
错误SQL72014:Microsoft SqlClient Data Provider框架:
消息128,级别17,状态1,存储过程CopyToTestDB,第5行
'copy'附近有语法错误。
错误SQL72045:脚本执行错误。 - 已尝试执行以下命令但未解决问题:
sp_configure 'contained database authentication', -1; GO RECONFIGURE; GO
解决方案
1. 排查存储过程语法问题
错误明确指向存储过程CopyToTestDB第5行的copy关键字,常见原因及修复:
- 若
copy是作为对象名(如表名、变量名),需用方括号[]包裹,例如:SELECT * FROM [copy] - 若为命令拼写错误,修正为SQL Server支持的合法语法,比如用
INSERT INTO ... SELECT实现数据复制,替代错误的copy语句 - 从源数据库导出该存储过程的脚本,逐行核对语法逻辑
2. 手动修复Bacpac包脚本
无法修改源数据库时,可直接编辑bacpac包:
- 将bacpac文件重命名为
.zip,解压到本地文件夹 - 在解压后的
Model目录中找到包含该存储过程的.sql文件 - 修正第5行的语法错误后,重新压缩所有文件为zip,再改回
.bacpac后缀 - 重新尝试还原操作
3. 对齐数据库兼容性级别
确保目标数据库与源数据库的兼容性级别一致:
-- 查看源数据库兼容性级别 SELECT name, compatibility_level FROM sys.databases WHERE name = '源数据库名'; -- 设置目标数据库兼容性级别 ALTER DATABASE 目标数据库名 SET COMPATIBILITY_LEVEL = 兼容级别; GO
内容的提问来源于stack exchange,提问作者Ch Ishani
相关产品推荐
相关产品推荐

