为SQL Server数据库版本控制生成数据库脚本

时间:2012-01-25 16:14:50

标签: sql-server database-versioning

在负责任的编程和版本控制的范围内,我想开始对我的数据库更改进行版本控制,特别是因为我正在我的数据库实例上进行开发,然后将其转移到生产中。我还没有发现任何对我如何做到这一点真正有意义的事情。我使用Visual Studio 2010 Pro作为我的IDE。是否有一个文档使这个过程变得简单并且能够相对容易地检测到对数据库的更改?或者我应该在工作流程中更改哪些内容以使其更容易?

3 个答案:

答案 0 :(得分:6)

我过去成功完成此类事情的一种方式是通过Sql Source Control。 Visual Studio不为您提供此功能。

或者,您可以使用SSMS为您生成数据库脚本并将其另存为文件;然后你可以检查脚本。您可以选择是在一个文件中生成整个数据库脚本,还是在逐个对象的基础上执行它。同步部分必须由您在生产中执行脚本来完成。总之,总噩梦

Redgate还提供Sql Compare,非常适合同步数据库。如果您或您的公司能够负担得起,请查看他们的产品。

答案 1 :(得分:1)

我们在内部使用自己的数据库解决方案,它提供了正确的数据库版本控制所需的所有工具。虽然我意识到这对每个人来说可能都不是一个完美的解决方案,但我邀请你看看它(它是开源的):bsn ModuleStore

版本控制方面如下:该工具可以半自动编写SQL脚本,并且它将源代码重新格式化为统一格式。因此,对于相同的源,文件将始终是相同的,无论何时以及由谁编写脚本;因此,这非常适用于非锁定源控制系统(尤其是SVN,Git或Mercurial)。

重新格式化所有语句都以相同的形式(例如ASINNEROUTER等可选关键字处理),将所有内容写入“dbo”模式(即使它是不同的),将所有标识符放入方括号([something]),大写所有保留字,缩进等。

除了版本控制之外,该工具的运行时部分可以区分正在运行的DB和CREATE脚本(DB源代码),并自动应用所有非破坏性更改的更新(例如更新索引,约束,视图,存储过程,触发器,自定义类型,新表等)。必须手动编写Destructuve更改(表更改通常需要数据转换)。如果生成的DB与CREATE脚本不匹配,运行时将确保在事务和回滚中执行所有更新,因此您可以安全地知道DB完全符合应用程序所需的版本,即使它已被手动篡改。

此外,可以在单个数据库中使用多个“模块”。每个模块都存储为模式并独立于其他模式,从而可以从单个数据库中添加或删除模块,并且无需为应用程序的不同部分创建多个数据库。此外,使用模式来确保没有名称冲突。

值得注意的是,工具集与SMO无关,它是自治的。

答案 2 :(得分:0)

在SVN保存您的数据库脚本。这是推荐 How to use SVN Tortoise

将数据库脚本保存在VSS。以下是参考 What is VSS ? How can we use that ?

在这两种情况下,您都可以跟踪所做的更改,以便将来您可以检查以版本形式保存的历史记录。

您也可以使用Red Gate产品

修改

  

你如何知道改变了什么?

使用比较功能检查以前版本中所做的更改。

  

如何将更改应用于实时数据库服务器?

从服务器下载最新文件。

我希望您没有在统一脚本中使用表的Drop语句。因为它将从表中删除所有记录。

将为Stored Pro,View,Function等发生删除声明。

请注意,您必须使用下面提到的操作计划

在生产服务器上运行完整的最新数据库脚本文件
1. Remove Drop Statement for Schema DDL
2. Add Drop/Create Statements for Stored Proc/Views
3. Include Alter statements DML of schema.

希望这肯定能帮到你。

enter image description here