从Azure BACPAC还原SQL Server数据库遇CatalogCollation错误求助
解决SQL Server 2014导入Azure BACPAC时的CatalogCollation错误
这个错误的核心原因很明确:CatalogCollation是SQL Server 2016及Azure SQL Database才引入的数据库级排序规则属性,而SQL Server 2014及更早版本并不支持这个属性——你的BACPAC里包含了这个Azure SQL DB的专属属性,但SSMS 2014/2017的DAC框架(用于导入数据层应用的核心组件)在适配旧版本SQL Server时无法识别它,所以抛出了这个报错。
下面是两种可行的修复方案,按操作复杂度排序:
方案1:手动修改BACPAC移除不兼容属性
BACPAC本质就是一个ZIP压缩包,我们可以直接移除这个不被SQL Server 2014识别的属性:
- 把你的
.bacpac文件后缀改成.zip,解压到一个单独的文件夹中 - 在解压后的文件夹里找到
model.xml文件,用文本编辑器(比如VS Code、Notepad++)打开 - 搜索并删除所有包含
CatalogCollation的行,通常是类似这样的内容:<Property Name="CatalogCollation" Value="SQL_Latin1_General_CP1_CI_AS" /> - 保存修改后的
model.xml,把整个解压文件夹重新压缩成ZIP文件,再改回.bacpac后缀 - 现在重新用SSMS的「导入数据层应用程序」功能尝试导入,应该就能顺利完成了
方案2:使用SqlPackage.exe命令行工具导入
如果你不想手动修改BACPAC文件,可以用微软官方的SqlPackage.exe工具(属于DACFx框架的一部分),它对跨版本兼容性的处理比SSMS内置工具更灵活:
- 下载并安装适配SQL Server 2014的DACFx版本(或最新版DACFx,它支持向下兼容处理这类属性)
- 打开命令提示符,运行类似下面的命令(替换成你自己的文件路径和连接字符串):
SqlPackage.exe /Action:Import /SourceFile:"C:\Downloads\your-database.bacpac" /TargetConnectionString:"Server=.\SQL2014;Database=RestoredDB;Integrated Security=True;" - 等待命令执行完成,工具会自动跳过SQL Server 2014不支持的属性,完成数据库导入
额外说明
如果你有条件升级目标SQL Server到2016及以上版本,这个问题会自动消失——因为新版本原生支持CatalogCollation属性,导入BACPAC时不会出现识别错误。但如果必须留在SQL Server 2014,上面的两个方案都能解决你的问题。
内容的提问来源于stack exchange,提问作者gringo_dave
相关产品推荐
相关产品推荐

