Если Вы работаете с целыми числами или не типы, с плавающей точкой не забывают Ваших bitshifting операторов: < <>>
int y = 10;
y = y >> 1;
Console.WriteLine("value halved: " + y);
y = y << 1;
Console.WriteLine("now value doubled: " + y);
MERGE
INTO table2 t2
USING table1 t1
ON t2.email = t1.email
WHEN MATCHED THEN
UPDATE
SET t2.col1 = t1.col1,
t2.col2 = t1.col2
WHEN NOT MATCHED THEN
INSERT (col1, col2)
VALUES (t1.col1, t1.col2)
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