实现SQL脚本应用程序的常见做法

时间:2014-04-15 09:28:01

标签: sql

我有一个很老的应用程序与当前的数据库(在MSSQL上,但没关系)。我用完所有必需的静态数据编写了它。现在我想通过更新脚本引入数据库更改。所以每个函数,每个SP都将放在独立文件中,所有架构更新脚本都将存储在名为'SomeProduct01_0001'的文件中,这意味着此脚本属于产品SomeProduct,sprint 1,它是第一个架构更新脚本

我知道每个脚本必须绝对可以重新运行,但无论如何我想要具有将这些脚本组合成基于数据库版本(存储在数据库表中)的脚本的功能。

  1. 处理一堆更新脚本有哪些常见的最佳做法?
  2. 什么是更好的 - 在收集器中实现anylyzis版本 (batexe文件)或为每个文件添加一些SQL标头?从其他角度来看,我已经有了版本 - 它将包含sprint标识符和脚本标识符,不确定是否可以在脚本标题中复制此信息。
  3. 如果用户尝试将其应用于较新的数据库但保留,则如何跳过文件内容 可用性将此脚本与任何其他脚本组合以执行更新 其他旧数据库?
  4. 如果组合脚本操作列/表仍然不存在于数据库中但将通过此脚本创建(例如,在第10行创建的表中并且在第60行中用于触发器或约束,则如何避免数据库冲突,因为我知道脚本不会被验证)?也许包装在EXEC('')整个脚本中?除了sigle引号字符我还需要逃脱什么?
  5. UPD:正如David Tanzer所说,最好使用现成的数据库迁移解决方案,因此对于像我这样的案例来说,它可能是最佳解决方案。它不是并且完全回答我的问题,但它适用于新的解决方案。

1 个答案:

答案 0 :(得分:1)

你不必自己实现这个,有工具可以做到这一点。看一下dbmaintain,它几乎提供了你所描述的功能:

http://www.dbmaintain.org/overview.html

我知道并与多个团队合作过,他们使用它来管理所有环境中的数据库模式:开发,测试,分段和生产。

http://flywaydb.org/似乎是另一种工具,它具有更多功能。他们甚至在他们的主页上比较了多个工具(包括dbmaintain)