SQL语句:对比两张表的数据并筛选出数据不同的

SQL语句:对比两张表的数据并筛选出数据不同的,第1张

SQL语句对比两张表的数据并筛选出数据不同的公式如下:

select A.* from A, B

where A.A1=B.B1 -- 相同主键,做表连接.

and A.A2 <>B.B2 -- 条件:A2不等于B2.

and A.A3 <>B.B3 -- 条件:A3不等于B3.

知识延展:

sql 语句是对数据库进行 *** 作的一种语言。

结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

构建两个临时表,将两个数据库结构信息导入。

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10083306.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存