我在Visual Studio中使用数据库项目。
在我的场景中,我有几个客户使用不同版本的数据库。
例如,版本为5的客户和版本7中的其他客户。
我提供了对版本8的更新。
客户端版本5应该运行"累积"脚本(更新到版本6和7)在运行更新到版本8的脚本之前。
客户端版本7应该只运行升级到版本8。
今天使用SSDT有没有自动的方法呢?
答案 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的命令行 - 这可以执行更新,也可以只生成升级其数据库的脚本。