为客户生成SQL升级脚本

时间:2009-05-14 05:50:55

标签: sql database

在产品版本之间维护升级脚本的最佳方法是什么?如果客户从产品版本3开始并转到版本5,那么为客户生成升级脚本的最佳方法是什么,以便解决版本3和版本5之间数据库架构的任何差异?

6 个答案:

答案 0 :(得分:4)

1)使用像RedGate's Schema and Data Compare

这样的工具

2)使用Visual Studio 2008's GDR project

3)自己写!

答案 1 :(得分:3)

之前已多次讨论过这个问题:

How to automatically upgrade deployed database for end-users

Database Deployment Strategies (SQL Server)

Any SQL Server 2008 Database Change Management (MIgrations) Tools Available?

Migrator.net似乎是这些问题的首选方法。我喜欢这种方法,但如果您的情况很简单,您可能更喜欢存储SQL以使用版本号在表中执行更改,如下所示:

create table upgradetable (major int, minor int, revision int, change text)

然后你可以通过简单的方式获得一个脚本来执行升级:

 select change from upgradetable where major > (select major from versiontable)

(当然要适应口味)。

如果您无法通过SQL进行所有升级,这将无效,在这种情况下,我建议使用migrator.net

答案 2 :(得分:1)

尝试Wizardby查看它是否合适。它有一个用于编写迁移的特殊DSL,它可以自动生成降级脚本并跟踪版本,因此您不必编写任何代码来执行此操作。

如果您想以编程方式进行升级,请参阅this

答案 3 :(得分:0)

我认为这完全取决于您的数据库结构和新版本的新功能。如果新版本与旧版本非常不同,您可能希望有一个ETL进程来执行升级,而不仅仅是SQL脚本

答案 4 :(得分:0)

可以通过遵循类似于dbdeploy或ruby rake迁移的方法来处理版本控制。您按顺序为每个更新脚本编号,并在数据库中有一个表,用于存储已实现的所有脚本编号。

升级工具只使用数字高于数据库已实现数字的脚本。

了解更多here

答案 5 :(得分:0)

实际上,这很容易 与标准代码存储库中的分支类似,您正在寻找的是源控制策略,允许您执行以下操作:
一个。在特定点创建数据库结构的分支。 (v3 / v4) 湾使用该分支将数据库还原到特定版本。 (即v3或v4) C。创建一组补丁脚本,以便从v3迁移到v4,或者v3迁移到v5 d。在运送给客户之前测试这些补丁。

通过这种方式,您可以支持多个版本的数据库,并提供经过测试的升级路径。

查看DBSourceTools(http://dbsourcetools.codeplex.com),特别是修补策略 此工具允许您在特定点建立数据库基线,并创建命名版本(v1) 然后,创建部署目标 - 并将命名版本增加到v2 最后,将补丁脚本添加到Patches目录,以便对架构或数据进行任何更改。

这给您带来了一个可重复的过程来测试从v1到v2应用的所有补丁 DBSourceTools还具有帮助您创建这些脚本的功能,即模式比较或脚本数据工具。

完成后,只需将patch目录中的所有文件发送到您的客户端。

玩得开心。