You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止SSDT部署DACPAC时删除运行时创建的Partition Schemes?

解决SSDT部署DACPAC时删除运行时创建的Partition Schemes的方案

方案1:自定义部署贡献者拦截删除操作

SSDT支持通过自定义部署贡献者修改部署计划,这是最彻底的解决方式:

  • 实现IDeploymentPlanModifier接口,编写逻辑识别运行时创建的Partition Schemes(可通过命名规则或标记区分),从部署计划中移除对应的删除操作
  • 将代码编译为DLL后,部署时通过以下参数加载:
    /p:AdditionalDeploymentContributors=你的自定义贡献者名称
    /p:AdditionalDeploymentContributorPaths=贡献者DLL所在路径
    

方案2:修改项目文件排除分区对象

手动编辑.sqlproj文件,添加属性明确排除分区相关对象的比较与处理:

<PropertyGroup>
  <SqlDeploymentExcludeObjectTypes>PartitionSchemes;PartitionFunctions</SqlDeploymentExcludeObjectTypes>
</PropertyGroup>

同时确保项目中不包含任何运行时创建的Partition Schemes定义,避免DACPAC将其判定为冗余对象。

方案3:配置发布配置文件强制忽略差异

在.pubxml发布配置文件中添加以下配置,覆盖默认部署规则:

<PropertyGroup>
  <IgnorePartitionSchemes>True</IgnorePartitionSchemes>
  <IgnoreObjectPlacementOnPartitionScheme>True</IgnoreObjectPlacementOnPartitionScheme>
  <DoNotDropObjectType>PartitionSchemes;PartitionFunctions</DoNotDropObjectType>
</PropertyGroup>

部署时确保该配置文件被正确加载,避免命令行参数覆盖设置。

方案4:分离静态与动态分区对象

将SSDT需要管理的静态Partition Schemes/Functions保留在项目中,运行时创建的动态分区对象完全独立于SSDT的架构定义。部署时SSDT仅处理项目内的对象,不会触及未定义的动态分区方案。


内容的提问来源于stack exchange,提问作者Ross Presser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:29:56