2015-06-25 17 views
1

我们只是试图在我们的项目中实施SSDT。SSDT实施:修改创建表

对于我们的产品之一,我们有很多客户端,这些客户端仅使用表和存储过程构建在单个数据库(DBDB)上。

我们为数据库DBDB创建了一个SSDT项目(使用VS 2012> SQL Server对象浏览器>右键单击项目>新建项目)。

一旦我们构建该项目,它将创建一个.sql文件。

问题:如果我们运行在客户端的DBDB该文件 - 再次创建所有的表&它删除它[本满足要求,但删除现有的记录:-(]

所有记录什么我们需要:仅中不存在客户端的新变化DBDB应该得到更新的更新

注意:我们有客户的DBDB数据库无法直接访问与我们最新的比较DBDB。我们只能给他们发送一些神奇的脚本文件,它们会将他们的DBDB更新为最新状态。

回答

1

更新客户端数据库的唯一方法是比较数据库模式,然后应用增量。你做的任何方式,你会需要一些方法来得到保持在在客户端运行的模式,多数民众赞成:

  1. 如果你们装运的一个版本的产品,它是最容易的那个版本N-1部署您的开发服务器并将其与您要发布的版本N进行比较。这样,SSDT就可以生成迁移到客户端所需的迁移脚本,以便将该数据库拉到当前模式。

  2. 如果您没有版本控制的产品,或者您的客户端可能已经更改了架构,或者您需要找到一种方法来在站点上提取架构数据(可能使用SSDT),然后让SSDT创建三角洲。

  3. 选项:您可以跳过使用SSDT的比较功能。但是你需要自己编写你的迁移脚本。对于模式的每个修改,您都需要自己编写DDL语句,并将它们包含在检查旧状态的if子句中,以便仅在创建旧状态时才进行一次更改。通过这种方式,从最终状态到最终状态并不重要,因为脚本将确定每一步是否以及如何执行。

最后是最灵活,但需要深刻的测试在它自己的,当然你是在现在的情况,你不知道的变化是什么了之前应该已经开始方式。但它可以帮助下一次。

这仅适用于表上的模式更改,因为您可以随时回退并重新创建所有存储过程,因为在删除它们时不会丢失任何内容。

1

这听起来像你可能没有正确推动更改。如果你已经构建了一个SQL项目,你有几个选项。

  1. 给他们dacpac并让他们使用SQLPackage来更新他们自己的数据库。
  2. 根据客户的“当前”版本生成更新脚本并将其提供给他们。

在任何情况下,听起来您的发布选项可能会设置为每次都删除并重新创建数据库。我已经在SSDT SQL项目上写了不少文章,并且入门可能对您有所帮助:http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html