sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异
2019-06-15 20:39
1371 查看
问题:
工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表、修改表、删除表、新增字段、修改字段、删除字段等变化,如果人工检查,数据库表和字段比较多的话,工作量就非常大。
解决方案:
这里博主为大家分享一个在工作过程中编写的自动检查数据库表结构版本差异的通用脚本,只需要把新旧数据库名称批量替换成实际的名称就可以,支持通过链接服务器跨服务器检查不同服务器的两个数据库表结构差异。
脚本:
/* 使用说明: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 t inner 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 t inner 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 #tempA from #tempCA a inner join #tempTA b on b.object_id = a.id inner join systypes c on c.xusertype = a.xusertype order by b.name -- 第二个数据库表和字段 select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型 into #tempB from #tempCB a inner join #tempTB b on b.object_id = a.id inner join systypes c on c.xusertype = a.xusertype order 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】
相关文章推荐
- 【SQL Server高可用性】数据库镜像:同一台机器的两个不同实例上配置数据库镜像 + 另一台见证服务器
- 用php脚本比较MySQL两个数据库的结构差异
- SQL Server 比较两个数据库的表结构差异
- SQL Server 比较两个数据库的视图和存储过程结构差异
- 检查mysql主从同步结构中的从数据库服务器的状态-脚本shell
- SQL Server 跨服务器 不同数据库之间复制表的数据的方法:
- CentOS下编写shell脚本自动备份数据库与网站
- 自动生成表结构 sql 从已知数据库获得创建表的结构 sql server
- SQL Server 跨服务器 不同数据库之间复制表的数据
- 比较两个数据库的表结构差异
- Sql Server两个数据库中有一张表的结构一样,怎么快速将一张表中的数据复制到另一个表中
- 比较两个数据库的表结构差异
- 计划任务 自动 服务器检查 的vbs脚本
- 转:邹建--比较两个数据库的表结构差异2
- 比较两个数据库的表结构差异
- [sql server] 不同服务器数据库之间的数据操作
- 比较两个数据库的表结构差异(ZT)
- LVS集群的基本原理、LVS/NAT模式的配置、LVS/DR模式的配置、编写自动脚本检查LVS上realserver健康性
- 比较两个数据库表结构的差异
- mysql5.5分别把这两个数据库同步到不同的从服务器