ITPub博客

首页 > 数据库 > > sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异

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

作者:浪花小雨滴 时间:2020-05-14 15:59:00 0 删除 编辑

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

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

脚本:


/* 使用说明: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_id
select 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 #tempB
drop table #tempTA, #tempTB, #tempCA, #tempCB, #tempA, #tempB

示例旧数据库DB_V1:

示例新数据库DB_V2:

脚本运行结果:

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

 


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



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3167578/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40093