1、问题场景

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

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

具体脚本:

使用说明:Old数据库为SQL_Road1,New数据库为[localhost].SQL_Road2。根据实际需要批量替换数据库名称,其中[localhost]也可以改成远程数据库IP地址。

sys.objects插入临时表

SELECTs.name + '.' + t.name AS TableName,t.* INTO #tempTA
FROMSQL_Road1.sys.tables t
INNER JOIN SQL_Road1.sys.schemas s
ON s.schema_id = t.schema_idSELECTs.name + '.' + t.name AS TableName,t.* INTO #tempTB
FROM[localhost].SQL_Road2.sys.tables t
INNER JOIN [localhost].SQL_Road2.sys.schemas s
ON s.schema_id = t.schema_id

sys.columns插入临时表

SELECT* INTO #tempCA
FROMSQL_Road1.dbo.syscolumns SELECT* INTO #tempCB
FROM[localhost].SQL_Road2.dbo.syscolumns

第一个数据库表和字段

SELECTb.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

第二个数据库表和字段

SELECTb.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  #tempAEXCEPTSELECT  * FROM  #tempB
) a;

增加的字段

SELECT  * FROM
(SELECT  * FROM  #tempBEXCEPTSELECT  * FROM  #tempA
) a;

这样我们就将两个数据库中表结构的差异比对出来了,当然这一般在数据同步过程中可能才会用到。

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

数据库运维:检查不同数据库中表的差异方案相关推荐

  1. oracle 数据库运维技术,Oracle数据库智能运维标准化工艺研究-orastar-DIY数据库运维工具-第1期 导论篇...

    1.编制目的 为了提升运维质量,增强数据库运维标准化.规范化,保障信息系统的安全.稳定.高效运行,助力实现智能运维,star同学在此抛砖引玉,特编制该文档. 2.维度定义 根据运维经验,现将数据库日常 ...

  2. mysql数据库运维_开源数据库MySQL DBA运维实战3

    DML数据操作语句 插入数据INSERT 完整插入 INSERT INTO 表名 VALUES (值1,值2,值3-值n); 部分插入 INSERT INTO 表名(列名,列名) VALUES (值1 ...

  3. 解密京东618大促数据库运维的攻守之道

    来自:DBAplus社群 本文根据高新刚老师在[2019 DAMS中国数据智能管理峰会]现场演讲内容整理而成. 讲师介绍 高新刚,京东数科数据库团队负责人,负责京东数科数据库平台的管理维护工作,带领团 ...

  4. 微博热点事件背后数据库运维的“功守道”

    作者 | 张冬洪 责编 | 仲培艺 [导语] 微博拥有超过3.76亿月活用户,是当前社会热点事件传播的主要平台.而热点事件往往具有不可预测性和突发性,较短时间内可能带来流量的翻倍增长,甚至更大.如何快 ...

  5. 2020,分布式架构会给传统数据库运维带来哪些变化?

    摘要:分布式架构可能是近几年最火的话题.从集中式.SOA到分布式架构,本文回顾了这些年金融行业经历的架构演变:结合当下一些较典型的分布式数据库的实现原理,分析了分布式数据库的三个发展阶段.分布式数据库 ...

  6. oracle数据库运维一般做什么,数据库运维都做些什么呢?

    本篇文章讲述如何大家轻松认知到数据库运维都做些什么,其中有许多小细节,所以请大家仔细阅读哦~ 一. 数据库生命周期 结合软件生命周期.项目的开展,数据库的生命周期大致可分为这么几个阶段. 1. 规划计 ...

  7. 数据库运维都要做些什么?

    首先结合软件生命周期.项目的开展,数据库的生命周期大致可分为这么几个阶段: 其中"规划"."开发"."实施"所要做的主要工作如下: 1. 规 ...

  8. 直播回顾 | 数据库运维不再难,数据库“自动驾驶”技术已到来

    腾讯云数据库国产数据库专题线上技术沙龙正在火热进行中,3月26日郝志刚的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾. 关注"腾讯云数据库"公众号,回复 ...

  9. 美团数据库运维自动化系统构建之路

    本文整理自美团点评技术沙龙第10期:数据库技术架构与实践. 美团点评技术沙龙由美团点评技术团队主办,每月一期.每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域. ...

  10. 化繁为简:数据库运维人员应该知道这些...

    云和恩墨近期发布了新一代的数据库实时监控和智能巡检平台 云和恩墨数据库实时监控和智能巡检平台BethuneX BethuneX数据库实时监控和智能巡检平台,首先它的初衷和愿景依然没有改变:成为数据库运 ...

最新文章

  1. 赔得比赚得多,职场人年终奖都花哪儿了?
  2. 容我喝一杯 java_花一杯茶的时间,学会Java反射(实用篇)
  3. HaoheDI让ETL变得简单
  4. iOS中NSString转换成HEX(十六进制)-NSData转换成int
  5. PHP实现高并发下的秒杀功能–Laravel
  6. 作者:孙晨(1995-),女,华东师范大学数据科学与工程研究院硕士生
  7. opencv 直方图投影
  8. Python入门:Dataframe的索引模式
  9. 西威变频器使用说明书_西威变频器说明书西威变频器说明书图文.doc
  10. 2020软考软件设计师--基础知识培训视频-任铄(小任老师)-专题视频课程
  11. [微云助手/微小云怎么用]如何设置群组群发
  12. 淘宝新店被人举报盗图要扣分处理办法
  13. 解决error while loading shared libraries: xxx.so.x类似问题办法和错误原因
  14. 【大数据开发】SparkStreaming——DStream输入源、原语、SparkStream与Kafka和Redis三者的交互
  15. excel 服务器怎么添加文件,本地的Excel文件怎么导入到远端服务器的临时表中
  16. 银行软开入职一周年分享
  17. 你为什么要学习这门专栏?
  18. 全球及中国驾驶员状态监视器行业研究及十四五规划分析报告
  19. 导航条样式代码【代码库】
  20. 函数的返回值返回概念

热门文章

  1. 一条命令解决系统N多故障
  2. [转]Eclipse下的JavaScript编辑器中文无法保存问题解决
  3. 内核中_init,_exit中的作用
  4. ROS与navigation教程——概述
  5. 关于halcon多区域挑选有关算法的自我理解(tuple_sort_index)
  6. jaxb转xml空值双标签_单品运营思维:标签-词路-聚焦-直搜-超直
  7. C++ dll的隐式与显式调用
  8. javascript 在对象中使用 定时器_如何使用JavaScript 面向对象编程
  9. 富士施乐3065扫描教程_全面支持IT国产化 富士施乐70款机型获统信UOS兼容认证
  10. 第5章 Python 数字图像处理(DIP) - 图像复原与重建13 - 空间滤波 - 线性位置不变退化 - 退化函数估计、运动模糊函数