某日的一个早晨,产品告诉我说要把之前变更的一个功能更改回原来的设计内容,但是发现我们之前的查询业务逻辑实在Proc中实现的,没有进行备份,不得已又要重新对该业务逻辑进行编码,浪费了不必要的时间与精力。

  通过这件事后思考,针对业务系统,很多复杂的查询逻辑是在PROC 中进行实现,如果哪天需求变更或者上线后发现问题需要回滚,这时候就会非常麻烦,如果能将数据库项目中相关视图,触发器或存储过程与版本管理工具结合起来的话,对于不同版本与不同分支时就能省很大一份力了,这样就解决了很多不必要的麻烦。

  为了解决问题首先是上网查相关资料,发现很多工具,但是不尽人意,兼容性和使用规则上不是那么完美,最后想到了宇宙第一IDE Visual Studio,也许微软早都替我们想好了呢,如此就发现了《SQL SERVER 数据库项目》,在结合了git后真是屡试不爽,下面就着重介绍一下数据库项目在系统中的应用。

1、打开VS,点击文件-新建项目-SQL SERVER 数据库项目(tips:安装vs时需要添加数据库管理插件)

2、创建项目后,在创建的解决方案下右键点击导入-数据库-选择数据库所在连接,导入设置默认就好,如果你们的数据库权限范围较高的话,根据自身情况设置

3、启动成功后,会自动扫描数据库的相关配置加载到VS列表当中,这样对系统的数据库架构就一览无遗了

4、打开某个表的结构文件,可以看到我们表结构设计,相关的索引、主键、触发器等,当然都只是结构,并且我们在界面上修改后,同时会生成对应的SQL语句,我们可以直接到数据库中F5执行 以下即可

  有的同学会说,我还是习惯在SqlServer中对表进行修改,包含业务逻辑SQL的编写,还有些ef code first 相关的项目都是会直接操作到DB项目的,无妨,接下来我来看数据库项目重要一个功能,架构比较

首先我在Person 内通过Sql Server新增一个字段

alter table person add DepartmentId int null

  增加完毕后,右键我们的数据库项目,点击架构比较,这里需要进行区分,假如你在VS内更改的表结构往数据库更新,就将数据项目放置左边,从数据库往数据库项目更新,反之,否则更新反了后果可是很糟糕的,选择数据源后,点击比较,VS就会自动比较出当前项目与比较项目的差异,这里就可以根据你自己的需要进行一个勾选,然后点击更新后,就会将左边的架构更新至右边了。

更新完毕之后,数据库项目中对应的表结构、存储过程、触发器等文件就会变成对应的物理文件,这些文件我们可以将它放置代码管理工具进行管理了,并且很好的注释此次更改的内容或新增的需求等,例如:

git add person.sql

git commit -ma "人员表增加部门Id"

git push

通过代码管理工具我们就能将我们的数据项目打成一个一个分支,很方便查到我们每个时期对应的结构文件了。

本文只是简单记录数据库项目在实际开发过程中带给我们的便利,让更多人知道这个实用的工具,其中还有很多坑需要各位一点一点去发现,这里就不一细说了,文章有写的不当的地方,请及时指出,如本文对您有所帮助,也请点个推荐,您的肯定也是是我最大的动力。thanks

如何通过Visual Studio来管理我们的数据库项目的更多相关文章

  1. 使用VSTS的Git进行版本控制(四)——在Visual Studio中管理分支

    使用VSTS的Git进行版本控制(四)--在Visual Studio中管理分支 可以从web版Team Services Git repo 的Branches视图中管理工作.定制视图来跟踪最关注的分 ...

  2. 使用Visual Studio Team Services敏捷规划和项目组合管理(七)——流程定制

    使用Visual Studio Team Services敏捷规划和项目组合管理(七)--流程定制 在Team Services中,可以通过流程定制工作追踪体验.流程定义了工作项跟踪系统的构建部分,以 ...

  3. 使用Visual Studio Team Services敏捷规划和项目组合管理(六)——VSTS仪表盘的使用

    使用Visual Studio Team Services敏捷规划和项目组合管理(六)--VSTS仪表盘的使用 仪表盘使团队能够看到项目的状态和监控项目的进展.简单来说,不必深入到团队项目站点的其他部 ...

  4. 使用Visual Studio Team Services敏捷规划和项目组合管理(五)——组合管理

    使用Visual Studio Team Services敏捷规划和项目组合管理(五)--组合管理 组合待办事项为产品所有者提供关于几个敏捷特性团队工作的洞察.产品所有者可以将高优先级的目标定义为Ep ...

  5. 使用Visual Studio Team Services敏捷规划和项目组合管理(四)——冲刺计划和任务板

    使用Visual Studio Team Services敏捷规划和项目组合管理(四)--冲刺计划和任务板 团队在sprint计划会议期间创建冲刺积压工作项,通常在冲刺的第一天召开该会议.每个冲刺都对 ...

  6. 使用Visual Studio Team Services敏捷规划和项目组合管理(三)——使用Kanban板

    使用Visual Studio Team Services敏捷规划和项目组合管理(三)--使用Kanban板 1.要查看Kanban板,请单击Work>Backlogs页面上的Board 链接. ...

  7. 使用Visual Studio Team Services敏捷规划和项目组合管理(二)——VSTS中的工作项

    使用Visual Studio Team Services敏捷规划和项目组合管理(二)--VSTS中的工作项 1.通过project/team下拉菜单选择MyHealthClinic\Web,导航到W ...

  8. 使用Visual Studio Team Services敏捷规划和项目组合管理(一)——使用团队、区域和迭代

    使用Visual Studio Team Services敏捷规划和项目组合管理(一)--使用团队.区域和迭代 概述 在本实验,你将会了解Visual Studio Team Services提供的敏 ...

  9. 使用Visual Studio 创建新的Web Part项目

    使用Visual Studio 创建新的Web Part项目 Web Part是你将为SharePoint创建的最常见的对象之中的一个.它是平台构建的核心基块. 1. 管理员身份打开Visual St ...

随机推荐

  1. iOS 导航栏不可点击

    self.navigationController.navigationBar.userInteractionEnabled = NO;

  2. php-fpm 相关

    ps aux | grep -c php-fpm 查看php-fpm进程数:ps aux | grep -c php-fpm 查看运行内存/usr/bin/php  -i|grep mem 重启php ...

  3. ArcGisServer根据最大最小坐标换算瓦片行列号(转载)

    ArcGisServer根据最大最小坐标换算瓦片行列号 1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法,而知道这个原理后,接下来我们要怎么用它呢?它和我们前端 ...

  4. iOS 沙盒

    1. 概念 某个应用程序的非代码文件存放空间. 2. 文件结构 每个沙盒有三个文件夹: Documents: 存放文件 Library: 存放默认设置或状态信息.Library/caches: 缓存文 ...

  5. 最通用的ibatis.Net使用sql server存储过程返回分页数据的详细例子

    ibatis.Net是一个比较简单和灵活的ORM框架,今天我分享一个我的项目中使用sql server通用存储过程来分页的一个例子,用ibatis.Net框架统一返回分页数据为IList<Has ...

  6. LeetCode---Depth-first && Breadth-first

    417. Pacific Atlantic Water Flow 思路:构造两个二维数组分别存储大西洋和太平洋的结果,先初始化边界,然后从边界出发,深度优先遍历,标记满足条件的所有节点 static ...

  7. 7 款华丽的 HTML5 Loading 动画特效

    我们在进行大数据的传输或者复杂操作的等待时,最好能有一个Loading等待的小动画提示用户.本文将为大家分享一些超华丽的基于HTML5的Loading加载动画特效,希望你会喜欢. 1.HTML5 Ca ...

  8. Eclipse tomcat插件

    1. 下载 http://www.eclipsetotale.com/tomcatPlugin.html 2. 解压 解压到Eclipse_Home/dropins 3. 重启Eclipse

  9. 【bzoj3998】 TJOI2015—弦论

    http://www.lydsy.com/JudgeOnline/problem.php?id=3998 (题目链接) 题意 给出一个字符串,求它的字典序第K小的子串是什么,分情况讨论不在同一位置的相 ...

  10. 滚轮事件的防冒泡、阻止默认行为的代码(效果是:只让当前div滚动,连当前文档都不滚动的效果)

    //用firefox变量表示火狐代理var firefox = navigator.userAgent.indexOf('Firefox') != -1;function MouseWheel(e){ ...