SSDT - 如何:增量更新?

时间:2015-02-04 12:21:45

标签: sql-server database version-control sql-server-data-tools

我在Visual Studio中使用数据库项目。

在我的场景中,我有几个客户使用不同版本的数据库。

例如,版本为5的客户和版本7中的其他客户。

我提供了对版本8的更新。

客户端版本5应该运行"累积"脚本(更新到版本6和7)在运行更新到版本8的脚本之前。

客户端版本7应该只运行升级到版本8。

今天使用SSDT有没有自动的方法呢?

3 个答案:

答案 0 :(得分:2)

使用msbuild:/ p:GetVersion = CXXXX

表单VS,获取特定版本(在解决方案资源管理器中右键单击项目)发布之前。

您针对两个不同的目标运行此目标,并将为指定的目标创建发布脚本(每个目标一个)。

如果您使用dacpac,则通过与目标进行比较,在dacpac的部署时自动生成脚本。如果你想部署相同的版本,你可以在两个目标上使用相同的dacpac文件,生成的脚本将专门为每个目标创建。

答案 1 :(得分:2)

在使用SSDT时(在我看来),部署数据库的累积“版本”的概念消失了。一个必须理解的SSDT的基本概念是声明性数据库开发。我对声明性数据库开发的个人定义:

您可以定义数据库架构所处的状态,而不是如何使其进入该状态。 SSDT中的发布引擎将负责使您的数据库进入该状态。

简单的例子,您当前在数据库中有一个名为[Person]的表,并且您想要添加一个名为[Person]的列。[MiddleName]。您在SSDT中定义新列,并在发布时,SSDT将发出类似于以下内容的内容:

ALTER TABLE [Person] ADD COLUMN [MiddleName]

重点是您不必编写该SQL语句,SSDT会为您编写并执行它。 在这种情况下,数据库版本的概念消失了。您只需将数据库更新为SSDT项目中定义的状态。希望有所帮助。

答案 2 :(得分:1)

你应该提供dacpac作为构建的输出,然后给它们进行部署。

您可以通过SSMS手动部署它,也可以为它们提供运行sqlpackage.exe的命令行 - 这可以执行更新,也可以只生成升级其数据库的脚本。