SQLServer 用脚本比较两表差异。正确答案追加分。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer 用脚本比较两表差异。正确答案追加分。相关的知识,希望对你有一定的参考价值。

A表和B表的字段类型一样。都有column_1, column_2, column_3...column_n。各自都有若干行数据。其中column_1为主键。

A为正确表。现在要查出B表中跟A表有差异的部分。包括两种情况:
(1) A表有而B表没有的行;
(2) 如果两表都有主键相同的行,则需要查出这行里面哪个字段和A表中不同(假设B表中第250行的第8列、第11列不同和A表不同)

(1)select * from A表 where column_1 not in (select column_1 from B表)
(2)select case when b.column_2 <> a.column_2 then b.column else null end as column_2,
后面的字段 from 表B as b
left join 表A a
on a.column_1=b.column_1
参考技术A 第一个通过not in就可以。第二个比较麻烦,通过case when来实现。追问

请具体一点

SQLServer数据库差异比较

//https://www.cnblogs.com/Leo_wl/p/11069813.html

/*
    使用说明: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

以上是关于SQLServer 用脚本比较两表差异。正确答案追加分。的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer数据库差异比较

SqlServer怎么比较两个表的字段是不是一致

oracle 两表数据对比---minus

sql怎么两个表关联

sql 两表数据合并 union

谁能推荐一个sqlserver数据库比较工具