1SSDT将尝试进行架构更改,但是在您的示例中ID为BIGINT,如果有人利用此特性输入值大于INT可以处理的值,则可能会遇到问题。回滚需要处理的内容会稍微多一点,因为它涉及到数据库中的数据而不仅仅是架构。您真的想丢失该新列中输入的数据吗?那个修复重要错误的proc呢?也许需要进行热修复?这绝对是一个需要仔细计划和理解回滚原因的领域。 - Peter Schott
没错,我并不是说这是一个完全安全的回滚方法;只是它是与选项(1)、(2)和(3)同级的。如果您正在使用源代码控制,您不一定需要采取 SSDT 快照或 dacpacs;这相当于重新发布旧版本的 SSDT 项目。 - Mark Sowul
顺带一提,我认为你也可以使用一个包含数据的 bacpac 文件。那更接近于 (4) 。当然,这并不处理部署后用户随后添加/修改的数据。 - Mark Sowul
Id INT,Name VARCHAR(10)
。然后在2.0中,您将其更改为Id BIGINT,Name VARCHAR(10),Description VARCHAR(1000)
。 SSDT当然会更改Id
列的类型,并添加Description
列。如果您现在尝试重新发布版本1模式,则SSDT将删除Description
并将Id
更改回INT
。 SSDT部署表示“这就是我想要数据库看起来的样子”,SSDT只会进行必要的更改以使模式看起来像那样。以前的版本仍然只是不同的目标模式。 - Mark Sowul