db2 两个结构相同的表_sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异...

问题:
工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表、修改表、删除表、新增字段、修改字段、删除字段等变化,如果人工检查,数据库表和字段比较多的话,工作量就非常大。

解决方案:
这里博主为大家分享一个在工作过程中编写的自动检查数据库表结构版本差异的通用脚本,只需要把新旧数据库名称批量替换成实际的名称就可以,支持通过链接服务器跨服务器检查不同服务器的两个数据库表结构差异。

脚本:

/*    使用说明:Old数据库为DB_V1,New数据库为[localhost].DB_V2。根据实际需要批量替换数据库名称    脚本来源:https://www.cnblogs.com/zhang502219048/p/11028767.html*/-- sysobjects插入临时表select s.name + '.' + t.name as TableName, t.* into #tempTA from DB_V1.sys.tables tinner join DB_V1.sys.schemas s on s.schema_id = t.schema_idselect s.name + '.' + t.name as TableName, t.* into #tempTB from [localhost].DB_V2.sys.tables tinner join [localhost].DB_V2.sys.schemas s on s.schema_id = t.schema_id-- syscolumns插入临时表select * into #tempCA from DB_V1.dbo.syscolumns select * into #tempCB from [localhost].DB_V2.dbo.syscolumns-- 第一个数据库表和字段 select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型into #tempAfrom #tempCA ainner join #tempTA b on b.object_id = a.idinner join systypes c on c.xusertype = a.xusertypeorder by b.name -- 第二个数据库表和字段 select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型into #tempBfrom #tempCB ainner join #tempTB b on b.object_id = a.idinner join systypes c on c.xusertype = a.xusertypeorder by b.name--删掉的字段select * from    (     select * from #tempA    except    select * from #tempB) a;--增加的字段select * from    (     select * from #tempB    except    select * from #tempA) a;--select * from #tempA--select * from #tempBdrop table #tempTA, #tempTB, #tempCA, #tempCB, #tempA, #tempB

示例旧数据库DB_V1:c18a2ba62cd62f860c46ba1cc43befbb.png

示例新数据库DB_V2:8871816698334810be2b2ec05d21bef0.png

脚本运行结果:b94aa3e8503f27cea7d83a5caf94c1d9.png

结论:从上面几个图可以看到,表和字段的差异部分就被自动检测到了。

转载:https://www.cnblogs.com/zhang502219048/p/11028767.html

文章经作者授权转载

171556544d0bd91b8c630f1f74a0dd6d.png

微信公众号能置顶啦,喜欢我的小伙伴们请将我置顶吧,这样就不用担心找不到我了哦~

07092e17f8870a67026f6dd052895f7e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值