从BACPAC文件恢复数据库时如何排除指定varbinary列?
解决BACPAC恢复时跳过指定VARBINARY列的方法
BACPAC本质是ZIP压缩包,包含数据库模型定义与对应的数据文件,我们可以通过修改压缩包内的内容实现类似BCP跳过列的效果,具体步骤如下:
1. 解压BACPAC文件
- 将目标
.bacpac文件重命名为.zip后缀(例如Original.bacpac→Original.zip) - 把该ZIP文件解压到本地指定文件夹(比如
C:\BacpacTemp)
2. 修改数据库模型定义(移除目标列)
- 打开解压后根目录下的
model.xml文件 - 通过
Name属性找到目标表对应的<EntityType>节点 - 定位到该表下对应VARBINARY列的
<Property>节点,删除整个节点 - 保存
model.xml,确保XML结构合法(无语法错误)
3. 修改对应表的数据导入格式(跳过列数据)
- 进入解压后的
Data文件夹,找到目标表对应的两个文件:[SchemaName.TableName].bcp和[SchemaName.TableName].xml - 打开
.xml格式文件(这是BCP导入的格式定义文件) - 找到目标VARBINARY列对应的
<Column>节点,直接删除该节点 - 保存该XML文件,确保格式正确
4. 重新打包为BACPAC文件
- 将修改后的所有文件重新压缩为ZIP包
- 把ZIP包重命名回
.bacpac后缀(例如Modified.bacpac)
5. 恢复修改后的BACPAC
- 使用SqlPackage.exe或SSMS的「导入数据层应用程序」功能,导入修改后的BACPAC文件即可
注意事项
- 操作前务必备份原BACPAC文件,避免不可逆损坏
- 修改XML文件时要保证语法正确,可借助XML验证工具检查
- 如果目标列存在关联约束(如外键、索引),需先删除对应约束的定义,否则模型验证会失败
内容的提问来源于stack exchange,提问作者Scott Willhite
相关产品推荐
相关产品推荐

