什么是版本控制我的SQL Server存储过程的最佳方式?
版本控制我的数据库对象的最佳方式是什么? 我正在使用Visual Studio 2005/2008和SQL Server 2005.我宁愿可以使用SVN的解决scheme。
与其他代码相同,向应用程序解决scheme中添加一个“数据库项目”,并将用于构build数据库对象的sql文件保留在那里。 对这些代码文件使用与应用程序相同的版本控制。
看看RedGate提供的工具。 它们专门处理包括SP在内的SQL Server对象的备份/恢复/比较情况。 或者我不确定,但我认为Visual Studio允许您将sp检入到存储库中。 没有尝试过我自己。 但我可以推荐使用RedGate工具。 他们救了我很多麻烦
我使用SVN的所有表/ sproc /函数源代码pipe理。
我找不到任何符合我需要的东西,所以我最终编写了一个实用程序 ,允许我将代码转储到一个不错的目录结构中,以便与SVN一起使用。
对于那些感兴趣的,现在可以在svn://finsel.com/public/VS2005/GenerateSVNFilesForSQL2005上find这个源代码。
我们使用Subversion,我们所做的只是将sql代码保存到我们的Subversion项目的目录中,然后在准备好之后将代码提交到存储库,并在开始处理之前从存储库进行更新。
真正的诀窍是说服开发人员这样做。 我们的dbas通过删除任何不在Subversion中的存储过程(或其他数据库对象)来做到这一点。 失去一些东西,几乎没有人再次这样做。
我不知道预包装的解决scheme,对不起…
…但你不能只是一个连接到数据库的小脚本,并将所有的存储过程作为文本文件保存到磁盘? 然后脚本会通过系统调用'svn add'将所有的文本文件添加到SVN仓库。
然后,您可能需要另一个脚本连接到数据库,删除所有存储过程,并从磁盘加载所有存储库存储过程。 每次运行“svn up”时都需要运行这个脚本,并且有新的/改变的存储过程。
我不确定这是否可以用MS SQL来完成,但是我相信MySQL会适应这个问题。 如果编写SVN扩展来做这件事太复杂了, Capistrano支持签入/签出脚本IIRC。
最好的方法 – 一个适合你的方法。
最简单的方法 – 目前还不存在。
我们使用半手动方法(源代码控制下的脚本,能够将存储过程部署到生产服务器的小部分人员,对模式所做的更改应反映在底层签入文件的更改中)。
我们应该做的是实现某种源代码控制VS明文模式转储比较…但它通常“为我们工作”,虽然这是一个非常faff大部分时间。
我同意,如果可能的话,你应该使用数据库项目来与你的应用程序源一起版本化数据库。
但是,如果您处于企业scheme中,则还应该考虑使用工具来跟踪服务器上的更改,并对这些更改进行版本控制。 仅仅因为数据库项目存在并不意味着某些pipe理员或开发人员不能更改服务器上的sprocs。
我们会转储到明文,并保留在我们的VCS中。
你将能够编写一个备份和提交来做类似的事情。
我从http://scriptdb.codeplex.com/使用scriptdb.exe
这可能是有用的使用rails的方式: http : //code.google.com/p/migratordotnet/wiki/GettingStarted
使用versaplex转储您的模式: http : //code.google.com/p/versaplex/
Versaplex带有Schemamatic,它读取数据库模式(表格,SP等)以及数据(数据被转储为CSV)。 我用它,与SVN和混帐,这真棒:)如果你需要帮助让我知道,这是值得一试! http://github.com/eduardok/versaplex