对我的SQL Server存储过程进行版本控制的最佳方法是什么?
对数据库对象进行版本控制的最佳方法是什么?我正在使用Visual Studio 2005/2008和SQL Server2005. 我希望可以与SVN一起使用的解决方案。
解决方案
我们将转储到纯文本,并将其保留在我们的VCS中。
我们将可以编写备份和提交脚本以执行类似的操作。
与其他代码相同,在应用程序解决方案中添加一个"数据库项目",并在其中保留用于构建数据库对象的sql文件。对那些代码文件使用与对应用程序相同的版本控制。
查看RedGate提供的工具。他们专门处理SQL Server对象(包括SP)的备份/还原/比较案例。或者,我不确定,但是我认为Visual Studio允许我们将sp检入到存储库中。 Havent自己尝试了一下。但是我可以推荐RedGate工具。他们为我省了很多麻烦
我不知道预包装的解决方案,对不起...
...但是我们不能只是一个连接到数据库并将所有存储过程作为文本文件保存到磁盘的小脚本吗?然后,脚本将通过对" svn add"进行系统调用,将所有文本文件添加到SVN存储库中。
然后,我们可能希望另一个脚本连接到数据库,删除所有存储过程,并从磁盘加载所有存储库存储过程。每次我们" svn up"运行并且具有新的/更改的存储过程时,都需要运行此脚本。
我不确定这是否可以使用MS SQL来完成,但是我非常有信心MySQL会解决这个问题。如果编写SVN扩展程序过于复杂,Capistrano支持签入/签出脚本IIRC。
我们使用Subversion,我们要做的就是将sql代码保存在Subversion项目的目录中,然后在准备就绪后将代码提交到存储库中,然后从存储库中进行更新,然后再开始处理其中已有的内容。
真正的诀窍是说服开发人员做到这一点。我们的dbas通过删除定期不在Subversion中的任何存储的proc(或者其他数据库对象)来实现这一目的。丢掉一次,几乎没有人再做一次。
我将SVN用于所有的表/过程/函数源控件。
我找不到满足我需要的任何内容,因此最终写了一个实用程序,使我可以将代码转储到一个不错的目录结构中以与SVN一起使用。
对于那些感兴趣的人,现在可以在svn://finsel.com/public/VS2005/GenerateSVNFilesForSQL2005上找到源。
最好的方式之一,为我们工作。
目前尚不存在的最简单方法。
我们使用半手动方法(源代码控制下的脚本,能够将存储过程部署到生产服务器的一小部分人,对模式的更改应反映在对基础签入文件的更改中)。
我们应该做的是实现某种源代码控制与明文模式转储diff ...,尽管通常在大多数情况下确实很麻烦,但它通常"对我们有用"。
我同意,如果可能的话,应该使用数据库项目来对数据库以及应用程序源进行版本控制。
但是,如果我们处于企业环境中,则还应考虑使用工具来跟踪服务器上的更改,并对这些更改进行版本控制。仅仅因为数据库项目存在并不意味着某些管理员或者开发人员就无法更改服务器上的那些存储库。
我正在使用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和git一起使用,它很棒:)
如果我们需要帮助,请告诉我,值得尝试!
http://github.com/eduardok/versaplex