使用TFS对数据库项目进行版本控制
使用TFS已经有很长一段时间了,从TFS2008一直到现在的TFS2010,效果不错,团队中其他成员目前也已经适应了这种方式,包括任务分解,项目进度安排,Bug录入,当然还有最重要的源代码版本控制。不过,由于所有的项目基本都涉及数据库相关的操作,而且数据库中表、视图、存储过程在项目实施初期更改的机会特别大,由此以来,对于数据库的版本控制也非常有必要,由于个人原因(主要是懒惰、拖延)和对TFS的不了解,一直未能实现。最近由于项目维护的原因,决心把数据库项目的版本控制也实施起来,方便日后的数据库版本维护,所以便有了这篇文章。
1.创建数据库项目。
- 在现有解决方案中,添加一个数据库项目,目前我们使用的是SQL Server 2008 R2,为了设置相关信息,选择新建“SQL Server 2008向导”,
a) 在项属性中,将项目类型设置为“数据库项目”,SQL脚本文件选择“按架构”点击“下一步”,
b) 设置数据库选项,此处选择排序规则为“Chinese_PRC_CI_AS”,点击“下一步”,
c) 选中“导入现有架构”,并设置源数据库链接,选择已有的数据库,
d) 在“配置生成/部署”中,选择部署操作为“创建部署脚本(.sql)并部署到数据库”(关键),并设置目标连接和数据库名称,因是对现有数据库的维护,此处设置与“导入现有架构”设置一致。
e) 点击“完成”
通过以上步骤,新建数据库项目,会根据现有数据库,将数据中所有对象定义全部生成到此项目中,我们可以很方便的更改维护表、视图、存储过程、触发器。将此项目签入到TFS上,就可以实现数据库项目的版本控制。
2.生成部署
此处以更改和使用比较频繁的存储过程来说明。在SQL Server Menagement Studio中更改定义和更改存储过程分别使用CREATE语句和ALTER语句,但是在此处,我们只需要通过CREATE语句,就可以完成存储过程的定义与更改。数据库项目会自行判断数据库服务器上的存储过程版本与现有存储过程是否一样,如果不一样,会自动将更改更新到数据库服务器中。
完成上面的步骤,需要将数据库项目部署到数据库服务器上,即在此数据库项目上点右键,选择“部署”,前提是在第一步骤中选中“创建部署脚本(.sql)并部署到数据库”。
同样,表结构在变化之后,也会将新的表结构定义更新。与存储过程不同的是,表结构的更改可能会影响到现有数据库表中的数据,可能会将现有表删除再重新建表,数据当然也会被删除。关于这一点,可以参考Social.MSDN上的帖子。
3.总结
在前也尝试使用数据库项目来实现数据库的版本控制,不过,实施过程中,一直被“SQL03070: 在此上下文中,无法识别此语句”错误困扰,它发生在将CREATE语句更改为ALTER的时候。在Google和Bing里面搜索不到相关中文参考内容。不过搜索“Statements Cause SQL03070 ..Not Recognized in this context“+”ALTER“,却有不少内容,特别是看了参考1中的文章,才明白是怎么使用。在帖子中noonie对更改表结构是否会删除数据也给出了自己的见解:
It depends on what you're trying to do. Adding columns to the end of the table "might" be safe but renaming a column or adding columns "between" existing columns will result in the table being dropped and re-created.
看来,英文不好的确不是个办法。
参考文献:
[1]Social.MSDN ALTER Statements Cause SQL03070 ..Not Recognized in this context.
---------------------------------------------