SSDT实现:更改Create的表格

时间:2015-06-25 10:26:17

标签: sql-server visual-studio-2012 sql-server-data-tools

我们只是想在我们的项目中实施SSDT。

我们的产品有很多客户端,它们构建在一个只有表和存储过程的单个数据库(DBDB)上。

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

构建该项目后,它会创建一个.sql文件。

问题:如果我们在客户端的DBDB上运行该文件 - 它会再次创建所有表格&它会删除其中的所有记录[这符合要求但删除现有记录:-(]

我们需要的是什么:只有客户端DBDB上没有的更新才能通过新的更改进行更新。

注意:我们无法直接访问客户的DBDB数据库,以便与我们最新的DBDB进行比较。我们只能向他们发送一些魔术脚本文件,将其DBDB更新为最新状态。

2 个答案:

答案 0 :(得分:1)

更新客户端数据库的唯一方法是比较数据库模式,然后应用增量。无论如何,您都需要一些方法来控制在客户端运行的架构:

  1. 如果您发运版本化产品,最简单的方法是将其版本N-1部署到您的开发服务器,并将其与您要发布的版本N进行比较。这样,SSDT可以生成您需要发送到客户端的迁移脚本,以将该数据库拉到当前架构。

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

  3. 选项:您可以完全跳过使用SSDT的比较功能。但是,您需要自己编写迁移脚本。对于模式的每次修改,您需要自己编写DDL语句并将其包装在if子句中,以检查旧状态,以便只进行一次更改并且如果旧状态存在。通过这种方式,从你所处的国家到你所要去的状态并不重要,因为脚本将确定每个步骤是否以及如何做。

  4. 最后一个是最灵活的,但需要自己进行深度测试,当然应该在你现在的状况之前开始,在那里你不知道改变了什么。但它可以帮助下一次。

    这仅适用于表上的模式更改,因为您可以始终回退到只删除并重新创建所有存储过程,因为丢弃它们没有任何损失。

答案 1 :(得分:1)

听起来你可能没有正确推动这些变化。如果您已经构建了SQL项目,那么您有几个选择。

  1. 给他们dacpac并让他们使用SQLPackage来更新他们自己的数据库。
  2. 针对客户的“当前”版本生成更新脚本并将其提供给他们。
  3. 在任何情况下,听起来您的发布选项可能会被设置为删除并每次都重新创建数据库。我已经写了很多关于SSDT SQL项目的文章,并开始在这里提供帮助:http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html