使用SqlPackage导出.bacpac文件时如何排除指定表的数据?
SqlPackage 导出跳过指定表数据的解决方案
方案1:使用原生ExcludeTableData参数(推荐)
SqlPackage v16.0 及以上的稳定版本已经原生支持排除指定表数据的功能,无需维护全量表列表,完全匹配使用场景:
- 参数格式为
/p:ExcludeTableData=<schema名>.<表名>,需要排除多个表时重复添加该参数即可 - 该参数只会跳过指定表的行数据,表的结构定义仍会正常包含在导出的.bacpac文件中,不会影响本地环境的数据库结构完整性
- 示例命令:
SqlPackage /a:Export /ssn:<你的SQL服务器地址> /sdn:<你的数据库名> /tf:./export_result.bacpac /p:ExcludeTableData=dbo.大表名1 /p:ExcludeTableData=dbo.大表名2
方案2:旧版本SqlPackage兼容方案
如果使用的是不支持ExcludeTableData的旧版本SqlPackage,可以通过脚本自动生成TableData参数列表,避免手动维护数百张表的成本:
- 先在目标数据库执行以下SQL,查询拼接出除了要排除的大表之外的所有表的参数:
SELECT STRING_AGG('/p:TableData=' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name), ' ') FROM sys.tables WHERE name NOT IN ('要排除的大表1','要排除的大表2')
- 将上述SQL查询得到的结果直接拼接至你的
SqlPackage /a:Export命令末尾即可,每次导出前执行一次该查询即可自动适配新增的表,无需手动更新参数列表。
内容的提问来源于stack exchange,提问作者Isaac Dontje Lindell
相关产品推荐
相关产品推荐

