我们已经在源代码控制中存储sql Server的脚本(数据库),与sql Server Management Studio(SSMS)或Visual Studio等任何工具分开存储.也就是说,我们有一个包含表,存储过程等脚本的文本文件的集合;我们在更新它们之前(例如在Management Studio中)直接检查这些进入和退出源代码控制并重新检查它们(然后使用SSMS中的脚本来更新数据库).
我们现在想转向采用更综合的方法.
我在StackOverflow中阅读了与sql Server相关的源代码控制的几个问题/答案(其中一些可追溯到几乎是StackOverflow的开头),但是还没有找到任何出色的解决方案.此外,一些条目早于Visual Studio 2010或sql Server 2008或现在可用的一些工具.
我也阅读了关于这个话题的其他文章,例如Troy Hunt的文章(一个例子是:http://www.troyhunt.com/2011/02/automated-database-releases-with.html)和K. Scott Allen的文章(例如:http://odetocode.com/blogs/scott/archive/2008/02/02/versioning-databases-views-stored-procedures-and-the-like.aspx).
sql Server Management Studio具有“数据库项目”的概念,但这显然是不推荐使用的功能,不推荐用于新开发.
目前我们正在考虑的方法是:
(1)在Visual Studio 2010中创建sql Server 2008数据库项目,并将其连接到源控件(例如TFS或VSS). [此选项可能需要Visual Studio的Premium或Ultimate或Team Database Edition.]
该方法将脚本视为“主”,并从该脚本创建/更新数据库以与脚本版本同步.
这种方法的理想特征是:全局搜索,查找/替换,重构,缺少索引或无效引用的项目的警告等.
缺点是:没有用于表和其他项目的GUI设计器,可以容易地丢失数据,同时对列进行一些更改(因为“alter”脚本丢弃列并重新创建它),缺少“format document”命令(在Visual Studio中可用)用于Web项目,但不适用于数据库项目).
(2)在sql Server Management Studio中使用Red-gate sql Source Control(和sql Compare).
该方法基本上将数据库视为“主”,并根据数据库设计的更改来更新脚本.在许多方面,这与许多小型开发团队的工作方式更接近.
这种方法的主要优点是您可以使用所有SSMS工具和设计器.
缺点是缺少设计完整性检查,无需查找/替换或全局搜索(不安装其他附件),而使用sql Source Control生成的脚本在语法上与SSMS或Visual Studio本机生成的脚本不同最终结果是一样的).
=====
您是否有替代方法的建议,是否使用/更喜欢将sql Server数据库的源代码控制集成到sql Server Management Studio或Visual Studio 2010中的特定工具或实用程序,以及如何更新/同步开发和生产数据库有变化?
我也看过其他一些软件工具/工具(其中一些已经在其他StackOverflow主题中提到):
sql检查器(尽管它是一个完全独立的工具,但未集成到SSMS或Visual Studio中)
LiquiBase(Apache / Java,还没有.NET)
DBSourceTools(尚未集成)
解决方法
相比之下,我发现MS工具过于复杂,这使得它们有些僵化.当我们在数据库中进行一些需要同步到项目中的变化时,我们发现自己在一个泡菜,但项目的变化,不允许在没有数据库变更的情况下构建该项目…最终一个需要大量手动编辑(并导致测试和购买RedGate工具)的整体catch-22场景.