SSDT - 如何:增量更新?

SSDT - How to: Incremental Updates?

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

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

例如,一个客户使用版本 5,另一个客户使用版本 7。

我提供了版本 8 的更新。

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

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

今天使用 SSDT 是否有自动执行此操作的方法?

使用 msbuild: /p:GetVersion=CXXXX

Form VS,获取具体版本(右击Solution Explorer中的Project)再发布。

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

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

您应该提供作为构建输出的 dacpac,然后将其提供给他们进行部署。

您可以通过 SSMS 手动部署它,也可以给他们一个运行 sqlpackage.exe 的命令行 - 这可以执行更新或只生成一个脚本来升级他们的数据库。

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

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

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

ALTER TABLE [Person] ADD COLUMN [MiddleName]

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