从源代码管理中自动执行数据库对象迁移

时间:2008-09-09 18:59:57

标签: sql-server version-control build-automation starteam

我正在寻找一些“最佳实践”,用于从源代码管理中自动部署存储过程/视图/函数/表更改。我正在使用StarTeam& ANT所以标签被照顾;我正在寻找的是你们中的一些人如何接近从源头自动拉动这些物体 - 不一定是StarTeam。

我想最终得到一个可以执行,签入和标记的脚本。

我不是要求任何人写这些 - 只是过去曾经(或没有)工作的一些想法或方法。

我正在努力清理乱七八糟的东西,并希望确保尽可能接近“正确”。

我们将表/视图/函数等存储在StarTeam中的各个文件中,而我们的数据库是SQL 2K5。

4 个答案:

答案 0 :(得分:4)

我们使用来自redgate(http://www.red-gate.com/)的SQL Compare。

我们有一个生产数据库,一个开发数据库,​​每个开发人员都有自己的数据库。

开发数据库与开发人员在检查更改时对其数据库所做的更改同步。

开发人员还会检查同步脚本和SQL Compare生成的比较报告。

当我们部署应用程序时,我们只需使用SQL Compare将开发数据库与生产数据库同步。

这适用于我们,因为我们的应用程序仅供内部使用。如果这不是你的场景,那么我会看看SQL Packager(也来自redgate)。

答案 1 :(得分:3)

检查MigrationsAndrew Peters中的another post指出)

答案 2 :(得分:1)

我更喜欢从表中分离视图,过程和触发器(可以随意重新创建的对象)。对于视图,过程和触发器,只需编写一个可以检出它们并重新创建最新版本的作业。

对于表,我更喜欢有一行数据库版本表。使用该表确定尚未应用的新更新。然后应用每个更新并更新版本号。如果更新失败,您只需要检查该更新,并且您可以重新运行,知道先前的更新不会再次发生。

答案 3 :(得分:1)

正如Carl指出的那样,您可以使用diff实用程序来创建更新脚本。 RedGate是一个很好的产品,但SQL Server 2k5附带TableDiff,它也应该可以完成这项工作。