数据库差分

场景:两年前的一个项目。数据库是sqlserver。客户经常把自己数据库dump发送过来,具体数据库有什么变化也不详细说明。经常,dump导入之后,程序就各种挂。因此就需要在导入之前做一个数据库的差分。看看有哪些不一样的。数据库里有几百个表,人工做太难了。

问题:比较两个数据库所有表的结构差异。

方案:做一个小工具来完成这件事情。首先想到的是VBA,考虑效率pass,然后先利用C#,短时间也做不出来。

不过这两个方案都需要读取两个过数据库的系统表和视图。既然都是这样操作干脆直接利用存储过程做一个函数的了。

 

设计:想好了方案,就是利用存储过程。那就开始设计一下程序流程。

首先,需要把需要的信息分别从两个数据库的系统视图中取出来。

接着,取出来的内容做比较。

最后,把结果表示出来。

具体实施:

1,创建两个临时表,名字随便了,好区分就可以了。

2,做一个系统视图的查询sql。

2.1,需要想想我们需要哪些信息。需要表名,表字段,主键,序号,标示,类型,长度,小数据点位数,允许空,默认值等信息。

2.2,这些信息都在这些视图中sysobjects,sysindexes,systypes,syscomments,syscolumns。

2.3,最后设计连接条件,排序

3,把2中的内容分别登陆到1中创建的临时表中。

4,再写一个查询,从这两个临时表中取数据,条件是顺序,表名,字段名,标示,主键,类型,长度,小数位数,允许空,默认值。select中每个项目都需要用case when分歧判断一下。

整体的思路就是这样了。在这里只分享一下算法。

速度还是不错的。又快又准确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值