我正在创建一个滑动窗口加载场景,并且分区函数将随着时间的推移而改变它们的边界。
我在我的 SQL Server Data Tools (SSDT) 数据库项目中创建了一些分区函数,其中一些初始边界硬编码。
然而,随着时间的推移和分区函数的边界发生变化,未来的 SSDT 数据库发布将恢复到原来的边界。
有没有办法优雅地处理这种情况,可能是通过禁用分区函数的发布?
我尝试将 SSDT 中分区函数的Build Action属性从 defaultBuild
更改为None
,但是由于依赖对象中缺少引用,因此项目无法构建。
我能够找到解决问题的方法——希望这对其他人有所帮助。
为避免每个数据库发布都重新创建分区功能,您可以选中“高级发布设置”对话框中的“忽略分区方案”选项(“数据库发布”对话框中的“高级...”按钮)。
从选项的描述(强调我的):
但是,如果您已经定义了具有页或行压缩的分区对象(表或索引),尽管忽略分区方案选项不再重新创建分区函数,分区对象无论如何都会重新创建。
发生这种情况是因为分区对象使用每个分区定义的压缩进行脚本化,并且由于对象的分区数量与最初定义的不同,SSDT 在发布时重新创建对象。例如(格式化):
为了避免这种情况发生,您还可以在同一个“高级发布设置”对话框中选中“忽略表选项”选项- 请记住,您将忽略其他选项,例如和(表选项的引用)。
ALLOW_ROW_LOCKS
ALLOW_PAGE_LOCKS
哎呀,这可不是什么好情况。据我所知,SSDT 不支持这一点。我能想到的最佳解决方法是使用部署前脚本将边界存储在表中,然后使用部署后脚本中的这些值更改分区函数。