What is the best way to version control my SQL server stored procedures?
版本控制数据库对象的最佳方法是什么? 我正在使用Visual Studio 2005/2008和SQL server 2005.我更喜欢可以与SVN一起使用的解决方案。
与其他代码相同,在应用程序解决方案中添加"数据库项目",并保留用于在其中构建数据库对象的sql文件。对应用程序使用与这些代码文件相同的版本控制。
看看RedGate提供的工具。它们专门处理SQL Server对象(包括SP)的备份/恢复/比较案例。或者我不确定,但我认为Visual Studio允许您将sp检查到存储库中。我自己也没试过。但我可以推荐RedGate工具。他们给我带来了很多麻烦
我将SVN用于我的所有表/ sproc / function源控件。
我找不到任何满足我需求的东西,所以我最终编写了一个实用程序,允许我将代码转储到一个很好的目录结构中,以便与SVN一起使用。
对于那些感兴趣的人,源代码现在可以在svn://finsel.com/public/VS2005/GenerateSVNFilesForSQL2005上找到。
我们使用Subversion,我们所做的就是将sql代码保存在我们的subversion项目的目录中,然后在我们准备好之后将代码提交到存储库,并在我们开始处理已存在的东西之前从存储库进行更新。
真正的诀窍是说服开发人员这样做。我们的dbas通过定期删除任何不在Subversion中的存储过程(或其他数据库对象)来做到这一点。失去一次,几乎没有人再这样做。
我同意,如果可能,您应该使用数据库项目来编译数据库以及应用程序源。
但是,如果您处于企业方案中,则还应考虑使用工具跟踪服务器上的更改,并对这些更改进行版本控制。仅仅因为数据库项目存在并不意味着某些管理员或开发人员无法更改服务器上的这些sprocs。
最好的方式 - 一个适合你的方式。
最简单的方法 - 目前不存在的方式。
我们使用半手动方法(源代码控制下的脚本,能够将存储过程部署到生产服务器的小部分人员,对架构的更改应反映在对基础签入文件的更改中)。
我们应该做的是实现某种源代码控制与明文架构转储差异...但它通常"适用于我们",尽管它在大多数情况下都非常有效。
我不知道预先打包的解决方案,对不起......
...但是你不能只是一个连接到数据库并将所有存储过程作为文本文件保存到磁盘的小脚本吗?然后,脚本将通过对'svn add'进行系统调用将所有文本文件添加到SVN存储库。
然后,您可能希望另一个脚本连接到数据库,删除所有存储过程并从磁盘加载所有存储库存储过程。每次运行"svn up"并拥有新的/更改的存储过程时,都需要运行此脚本。
我不确定这是否可以用MS SQL完成,但我相信MySQL会适应这一点。如果编写SVN扩展来执行此操作太复杂,Capistrano支持签入/签出脚本,IIRC。
使用versaplex转储您的架构:http://code.google.com/p/versaplex/
Versaplex附带Schemamatic,它读取数据库模式(表,SP等)以及数据(数据被转储为CSV)。
我使用它,使用SVN和git,它真棒:)
如果您需要帮助请告诉我,这值得一试!
http://github.com/eduardok/versaplex
我正在使用http://scriptdb.codeplex.com/上的scriptdb.exe
使用rails方式可能很有用:http://code.google.com/p/migratordotnet/wiki/GettingStarted
我们转储到明文并将它们保存在我们的VCS中。
您可以编写备份和提交脚本来执行类似的操作。