MYSQL比较两个数据库中表和字段的差异

转载 2016年12月21日 12:13:26
-- 比较两个数据库中表的差异

-- u表,p存储过程,v视图
-- INTFSIMSNEW新库,INTFSIMS旧库

SELECT NTABLE = A.NAME, OTABLE = B.NAME
FROM INTFSIMSNEW..SYSOBJECTS A
  LEFT JOIN INTFSIMS..SYSOBJECTS B
    ON A.NAME = B.NAME
WHERE ISNULL(B.NAME, '') = ''
  AND A.XTYPE = 'U'
UNION ALL
SELECT NTABLE = B.NAME, OTABLE = A.NAME
FROM INTFSIMS..SYSOBJECTS A
  LEFT JOIN INTFSIMSNEW..SYSOBJECTS B
    ON A.NAME = B.NAME
WHERE ISNULL(B.NAME, '') = ''
  AND A.XTYPE = 'U'
ORDER BY 1, 2

-- 比较两个数据库中每个表字段的差异

SELECT
  表名A = CASE WHEN ISNULL(A.TABLENAME, '') <> '' THEN A.TABLENAME ELSE B.TABLENAME END,
  字段名A = A.FIELDNAME,
  字段名B = B.FIELDNAME,
  顺序= A.FIELDSNO,
  说明= CASE WHEN A.FIELDTYPE <> B.FIELDTYPE THEN '类型: ' + A.FIELDTYPE + '-->' + B.FIELDTYPE
              WHEN A.FIELDSNO <> B.FIELDSNO THEN '顺序: ' + str(A.FIELDSNO) + '-->' + str(B.FIELDSNO)
              WHEN A.LENGTH <> B.LENGTH THEN '长度: ' + str(A.LENGTH) + '-->' + str(B.LENGTH)
              WHEN A.LENSEC <> B.LENSEC THEN '小数位: ' + str(A.LENSEC) + '-->' + str(B.LENSEC)
              WHEN A.ALLOWNULL <> B.ALLOWNULL THEN '允许空值: ' + str(A.ALLOWNULL) + '-->' + str(B.ALLOWNULL)
         END
FROM (SELECT
        TABLENAME = B.NAME,
        FIELDNAME = A.NAME,
        FIELDSNO = A.COLID,
        FIELDTYPE = C.NAME,
        LENGTH = A.LENGTH,
        LENSEC = A.XSCALE,
        ALLOWNULL = A.ISNULLABLE
      FROM INTFSIMSNEW..SYSCOLUMNS A
        LEFT JOIN INTFSIMSNEW..SYSOBJECTS B
          ON A.ID = B.ID
        LEFT JOIN INTFSIMSNEW..SYSTYPES C
          ON A.XUSERTYPE = C.XUSERTYPE
      WHERE B.XTYPE = 'U') A
  FULL JOIN (SELECT
               TABLENAME = B.NAME,
               FIELDNAME = A.NAME,
               FIELDSNO = A.COLID,
               FIELDTYPE = C.NAME,
               LENGTH = A.LENGTH,
               LENSEC = A.XSCALE,
               ALLOWNULL = A.ISNULLABLE
             FROM INTFSIMS..SYSCOLUMNS A
               LEFT JOIN INTFSIMS..SYSOBJECTS B
                 ON A.ID = B.ID
               LEFT JOIN INTFSIMS..SYSTYPES C
                 ON A.XUSERTYPE = C.XUSERTYPE
             WHERE B.XTYPE = 'U') B
    ON A.TABLENAME = B.TABLENAME
      AND A.FIELDNAME = B.FIELDNAME
WHERE ISNULL(A.TABLENAME, '') = ''
  OR ISNULL(B.TABLENAME, '') = ''
  OR A.FIELDTYPE <> B.FIELDTYPE
  OR A.FIELDSNO <> B.FIELDSNO
  OR A.LENGTH <> B.LENGTH
  OR A.LENSEC <> B.LENSEC
  OR A.ALLOWNULL <> B.ALLOWNULL
ORDER by 1, 4


利用Navicat实现MySQL数据库结构对比和同步

在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create、modify、drop等进...
  • carry9148
  • carry9148
  • 2016年08月19日 17:15
  • 12618

mysql比对两个数据库表结构的方法

本文介绍mysql比对两个数据库表结构的方法,可以检查出两个数据库表的差异,并获取更新sql语句消除表之间的差异。提供完整操作步骤与实例,方便大家比对数据库表结构时使用。...
  • fdipzone
  • fdipzone
  • 2017年12月24日 13:02
  • 37743

两个数据库进行数据比对(DataTable对比)

前一段时间做了一个数据比对的工作,大致的要求是这样: 首先从A库导出产品的数据模型到Excel中,导出完成时记录导出产品条目以及产品结构到B库的Model表和Partstr表中。然后就是每隔一段固定...
  • u012147433
  • u012147433
  • 2015年09月25日 16:41
  • 5314

mysql  比较两表数据差异

select pnumber,pmoney from productinfo A where not exists (select * from nproductinfo B where A.pnum...
  • u012635819
  • u012635819
  • 2015年04月02日 15:08
  • 2337

mysql两个数据库比较

因为公司有本地远程多台服务器,导致数据库版本过多.那多个数据库的差异在哪里呢?个人想了三个解决办法   1.sql语句:因为mysql 没有full outer join,所以用left join u...
  • beimuaihui
  • beimuaihui
  • 2009年05月08日 10:59
  • 2871

mysql: 比较同一张表的相邻两行的某一字段的值

来源:http://www.iteye.com/topic/322307 觉得这个问题比较有趣,发出来给有用的人参考:  /*Column Information For - te...
  • u010802573
  • u010802573
  • 2015年04月17日 01:35
  • 3440

MYSQL比较两个数据库中表和字段的差异

MYSQL比较两个数据库中表和字段的差异
  • netuser1937
  • netuser1937
  • 2016年12月21日 12:13
  • 3206

java比较两个mysql数据库中的表信息差异

  • 2016年03月17日 17:59
  • 13.66MB
  • 下载

Mysql 对比两张表数据

第一种方案: select  *  from  tb_a   A  where  NOT EXISTS (select 1 from tb_b  B  where  A.ID = B.ID) ...
  • gaochen519
  • gaochen519
  • 2016年07月08日 17:35
  • 2285

比较两个mysql数据库表结构的差异

需求来源:一个线上系统,一个开发系统,现在要把开发系统更新到线上,但是开发系统的数据库结构与线上的略有差异,所以需要找出两个数据库的表结构差异。 数据库表结构的差异 注:操作均在Linux系统...
  • binyao02123202
  • binyao02123202
  • 2013年08月12日 14:05
  • 14421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL比较两个数据库中表和字段的差异
举报原因:
原因补充:

(最多只允许输入30个字)