永发信息网

如何比较两个数据库的差异

答案:2  悬赏:0  手机版
解决时间 2021-11-07 11:43
如何比较两个数据库的差异
最佳答案
构建两个临时表,将两个数据库结构信息导入。
create Table #t1
(
ID Int Identity(1,1) Not Null Primary Key,
tablename nvarchar(50) NULL,
columnName nvarchar(50) NULL,
columnIndex int null,
columnType nvarchar(50) NULL
)
use 数据库1
insert into #t1
create Table #t2
(
ID Int Identity(1,1) Not Null Primary Key,
tablename nvarchar(50) NULL,
columnName nvarchar(50) NULL,
columnIndex int null,
columnType nvarchar(50) NULL
)

//开始比较
use 数据库2
insert into #t2
SELECt
SO.name as '表名',
SC.name as '表列名',
SC.colid as '索引',
ST.name as '类型'
FROM
sysobjects SO, -- 对象表
syscolumns SC, -- 列名表
systypes ST -- 数据类型表
WHERe
SO.id = SC.id
AND SO.xtype = 'U' -- 类型U表示表,V表示视图
AND SO.status >= 0 --加一个条件:SO.status >= 0,否则会将系统的临时表显示出来
AND SC.xtype = ST.xusertype
ORDER BY
SO.name, SC.colorder
go

//查询出 在t1 里有, t2 里没有的字段,查询列出来。
select * from
(
select tablename,columnName,columnType from #t1 where tablename like '%EMS_%'
EXCEPT
select tablename,columnName,columnType from #t2 where tablename like '%EMS_%'
) as c
order by tablename

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

-- 比较两个数据库中表的差异
-- 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
全部回答
什么数据库啊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三星GT19152手机恢复出厂设置后 看相片 视频
做彩卡的印刷厂哪家比较专业实惠?像印刷u盘
沙特阿拉伯属于dhl的哪一区的
牙疼难忍怎么办,心慌的不行,有什么好办法
28○4=7○1 7○3=16○6 求答案
手机卡是异地的我给别人身份证叫别人帮我补办
求好心人帮忙下载pudn程序。。。
戏改后的三部经典作品,分别是田汉编剧的什么
格力股价1996年买入47每股买入,2014年没股31
如何看出一个女人和多个男人做过
松花酿酒 春水煎茶标题有什么含义
乡城县安康分校地址在什么地方,想过去办事
大华国际旅行社(太谷营业部)地址有知道的么?
是不是H7N9?
怎么给猫换猫砂
推荐资讯
盐源县大队科目一考场地址在哪,我要去那里办
有一个女主叫腾月是什么小说啊?
为啥不说把日本鬼子歼灭在中国
帮忙起名字,大名小名都可以
海字和哪个带草字头的字取名字得分高
拉钉的常见故障,出现故障的原因是什么
当你提日本人说话,别人说你时怎么办
炒原油被骗了怎么办?
一片真心向明月,奈何明月照沟渠!
年轻人读什么报纸
煮一个鸡蛋需要5分钟,煮100个鸡蛋需要几分钟
4 4 4 4 =5 就是可以用加减乘除括号 让它等
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?