我们只是想在我们的项目中实施SSDT。
我们的产品有很多客户端,它们构建在一个只有表和存储过程的单个数据库(DBDB)上。
我们为数据库DBDB
创建了一个SSDT项目(使用VS 2012> SQL Server对象浏览器>右键单击项目> New Project)。
构建该项目后,它会创建一个.sql
文件。
问题:如果我们在客户端的DBDB上运行该文件 - 它会再次创建所有表格&它会删除其中的所有记录[这符合要求但删除现有记录:-(]
我们需要的是什么:只有客户端DBDB
上没有的更新才能通过新的更改进行更新。
注意:我们无法直接访问客户的DBDB
数据库,以便与我们最新的DBDB
进行比较。我们只能向他们发送一些魔术脚本文件,将其DBDB
更新为最新状态。
答案 0 :(得分:1)
更新客户端数据库的唯一方法是比较数据库模式,然后应用增量。无论如何,您都需要一些方法来控制在客户端运行的架构:
如果您发运版本化产品,最简单的方法是将其版本N-1部署到您的开发服务器,并将其与您要发布的版本N进行比较。这样,SSDT可以生成您需要发送到客户端的迁移脚本,以将该数据库拉到当前架构。
如果您没有版本化产品,或者您的客户端可能更改了架构,或者您需要找到一种方法来在站点上提取架构数据(可能在那里使用SSDT)然后让SSDT创建三角洲。
选项:您可以完全跳过使用SSDT的比较功能。但是,您需要自己编写迁移脚本。对于模式的每次修改,您需要自己编写DDL语句并将其包装在if子句中,以检查旧状态,以便只进行一次更改并且如果旧状态存在。通过这种方式,从你所处的国家到你所要去的状态并不重要,因为脚本将确定每个步骤是否以及如何做。
最后一个是最灵活的,但需要自己进行深度测试,当然应该在你现在的状况之前开始,在那里你不知道改变了什么。但它可以帮助下一次。
这仅适用于表上的模式更改,因为您可以始终回退到只删除并重新创建所有存储过程,因为丢弃它们没有任何损失。
答案 1 :(得分:1)
听起来你可能没有正确推动这些变化。如果您已经构建了SQL项目,那么您有几个选择。
在任何情况下,听起来您的发布选项可能会被设置为删除并每次都重新创建数据库。我已经写了很多关于SSDT SQL项目的文章,并开始在这里提供帮助:http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html