目前 SqlPackage.exe 与 BitBucket 一起用于部署数据库架构更改。
最近,基于 3 个源表创建了一个相当大的索引视图,这些表是应用程序的关键。在视图上创建聚集索引的过程以及随之而来的停机时间大约需要一个小时才能完成。
最近,必须将一列添加到索引视图的一个源表中。尽管视图具有模式绑定,但这应该不是问题,因为视图的定义中没有使用新列(呃!)。尽管如果我们查看 SqlPackage 生成的脚本,它会选择删除索引视图以应对模式绑定,尽管这完全没有必要。在我看来,SqlPackage 无法检查依赖关系,因此出于预防措施而放弃了视图。
如果我在本地机器(SQL Server 2017 Dev edition)上模拟类似的情况,比较 DacPac 总是会导致视图的删除和重新创建。
现在的问题是:有没有人知道任何解决方法或任何方法来防止 SqlPackage 删除视图?我检查了所有属性,但那里似乎没有任何可行的选择。
SqlPackage.exe 经常选择一种很难的方式来做事。
对于类似这样的问题,我们有以下流程:
1. 在开发环境中生成更改脚本并查找任何长步骤,例如您拥有的步骤。
2.手动创建一个脚本来实现所需的更改(不是所有的更改,所以在你的情况下它将是视图更新)。在 SQLPackage 之前执行此脚本。
3. 再次运行SqlPackage。它应该注意到这个视图不需要更改,只会实现其他更改。