Microsoft 发布了一个工具来比较SQL 表之间的数据,这在某些情况下可能是一个不错的选择。
编辑:忘了提,它还生成一个脚本来插入/更新丢失或不同的行。
为了完整起见,我破解了这个查询,它可以满足您的需求,它会更新现有的 table2 记录,并根据电子邮件地址添加缺失的记录。
下面的“更新”和“插入缺失”查询是您想要的。
BEGIN TRAN
create table #table1 (id int, fname varchar(20), email varchar(20))
insert into #table1 values (1, 'name_1_updated', 'email_1')
insert into #table1 values (3, 'name_3_updated', 'email_3')
insert into #table1 values (100, 'name_100', 'email_100')
create table #table2 (id int, fname varchar(20), email varchar(20))
insert into #table2 values (1, 'name_1', 'email_1')
insert into #table2 values (2, 'name_2', 'email_2')
insert into #table2 values (3, 'name_3', 'email_3')
insert into #table2 values (4, 'name_4', 'email_4')
print 'before update'
select * from #table2
print 'updating'
update #table2
set #table2.fname = t1.fname
from #table1 t1
where t1.email = #table2.email
print 'insert missing'
insert into #table2
select * from #table1
where #table1.email not in (select email from #table2 where email = #table1.email)
print 'after update'
select * from #table2
drop table #table1
drop table #table2
ROLLBACK