Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiorna e inserisci in una tabella da un'altra

Merge table2 as target
using table1  as source
on
target.id=source.id
When matched 
Then
update 
set target.id=source.id,
    target.name=source.name
When not matched by Target Then
INSERT (id, name) VALUES (id, name);

Ci sono alcuni problemi con l'istruzione Merge, quindi dovrebbe essere usata con attenzione ..

Inoltre, ti consiglio di usare merge come due istruzioni DML separate come di seguito..

insert into table2
select * from table1 t1 where not exists (select 1 from table2 t2 where t2.id=t1.id)

update t2
set 
t2.id=t1.id,
t2.name=t1.name
from 
table1 t1
join
table2 t2
on t1.id=t2.id

Motivi dichiarati da Paul White qui nella sua risposta ..