在 Management Studio 中创建 CHANGE 脚本?
Posted
技术标签:
【中文标题】在 Management Studio 中创建 CHANGE 脚本?【英文标题】:Creating a CHANGE script in Management Studio? 【发布时间】:2009-08-24 22:42:51 【问题描述】:我想知道是否有一种方法可以自动将我对列、表、关系等所做的所有更改附加到脚本文件中......
问题是我在 TEST 数据库上做了很多不同的更改,我的想法是在我将测试数据库移动到生产环境时应用此更改脚本......因此保留生产数据但应用所有架构和对象更改.
有没有简单的方法来做到这一点?也可以迁移数据库图的变化吗?
我已经看到每次我进行更改时如何创建更改脚本,但这意味着我必须复制并粘贴到主文件中。其实很简单!
我只是想知道我是否遗漏了什么?
【问题讨论】:
【参考方案1】:不要使用 UI 对测试服务器进行更改。编写脚本并将它们置于源代码控制之下。您可以从实时数据的备份开始测试您的脚本,并且您可以调整 yoru 脚本,直到它们达到所需的结果。然后,您可以签入脚本以供参考,然后在实时服务器上应用它们。见这篇文章Version Control and Your Database。
顺便说一句,请查看SSMS toolpack,我认为它可能会满足您的需求(我不确定)。我的建议仍然站得住脚:版本化您的架构,使用显式创建/保存的脚本,使用源代码控制。
【讨论】:
【参考方案2】:无法在 SSMS 中直接生成“delta”脚本。
但是,如果每次发布更改时,您都使用 SQL Server Database Publishing Wizard 将整个数据库(包括数据)脚本化到 SQL 中,您应该能够提取版本之间的差异并以这种方式获取您的增量。
如果钱不是问题,您可以购买 Visual Studio Team System Database Architect 版本并使用其出色的数据库比较工具来生成和版本控制正是您想要的差异。
【讨论】:
【参考方案3】:尝试使用 SQL Server 2005 附带的 TableDiff。
SQL Server 2005 TableDiff Utility
tablediff Utility
【讨论】:
【参考方案4】:我们有这样的流程,当开发人员完成更改时,他们会编写脚本并将其签入 Subversion。在 Subversion 中,我们有一个用于存放表、存储过程、数据等的文件夹。他们将其编写成脚本,因此它是可重复的(即,如果新数据已经存在,则不要插入它。)无论如何,这很重要,所以你保留数据库中给定对象的更改历史记录。
过去,我们只需将每个想要编写脚本的文件输入文本文件(即 FileListV102.txt)。当我们准备发布版本时,我们将对所有文件进行“获取最新”(从当时的 VSS)。然后我们有一个简单的实用程序可以读取“文件列表”文件并依次打开这些文件中的每一个将它们连接成一个输出文件。这很容易编码。
我们已经超越了这一点,现在我们有了一个发布管理工具(可以在here 找到,将于 9 月中旬发售),它可以获取所有文件并从中创建一个大的 SQL 脚本文件。它会根据文件夹名称按照您期望的顺序执行此操作——因此“Tables”文件夹中的文件在“Data”文件夹中的文件之前完成,等等。
无论哪种方式,一旦完成,您就有一个大的 SQL 脚本文件,然后您可以将其应用到新的生产副本,这就是您测试的对象。
【讨论】:
【参考方案5】:我知道我迟到了,但我只是想补充一下,那里有数十种第三方产品。有些非常好,有些很便宜或免费,还有一些是混合的。我在这里列出了 22 个:
http://bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/
【讨论】:
【参考方案6】:我们一直在使用名为Kal Admin 的相对较新的软件。 它具有更改管理功能,可以非常轻松地将选定的更改分发到其他数据库。我们曾经通过比较两个数据库来做到这一点,但它不能满足我们对更改跟踪的需求。
顺便说一句,Kal Admin 还具有元数据和数据比较功能。
【讨论】:
以上是关于在 Management Studio 中创建 CHANGE 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server Management Studio 中创建存储过程时出现语法错误
SQL Server Management Studio 2012在哪里?
SQL Management Studio 在脚本创建后无法识别表存在
如何在 SQL Server Management Studio 中管理 SQL CE 数据库?