在 SQL Server 数据工具中,您有部署选项“如果可能发生数据丢失,则阻止增量部署”,我敢打赌这是保持检查的最佳做法。
假设我们有一个表 foo 和一个现在是多余的列 bar - 没有依赖项、外键等,并且我们已经在数据层和存储过程中删除了对该列的引用,因为它根本没有被使用。换句话说,我们对删除此列不会产生不利影响感到满意。
美中不足的是:
- 该列中有数据
- 该数据库已发布到数百个分布式客户端,更改可能需要几个月的时间才能波及所有客户端
随着列的填充,发布将失败,除非我们更改“如果可能发生数据丢失,阻止增量部署”选项。这个选项是在数据库级别,而不是表级别,因此由于客户端的分布式特性,我们必须在所有数据库更新之前关闭“数据丢失”选项几个月,然后重新打开一旦所有客户端都更新了(我们的数据库具有由我们的构建设置的版本号)。
您可能认为我们可以使用预部署脚本来解决这个问题,例如
if exists (select * from information_schema.columns where table_name = 'foo' and column_name = 'bar') BEGIN
alter table foo drop constraint DF_foo_bar
alter table foo drop column bar
END
但是除非我们关闭“可能发生数据丢失”选项,否则这再次失败。
我只是对其他人在这种情况下做了什么感兴趣,因为我希望有目前似乎不可能的粒度。