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

Opdater og indsæt til en tabel fra en anden

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);

Der er nogle problemer med Merge-erklæringen, så den bør bruges med advarsel ..

Yderligere anbefaler jeg at bruge flette som to separate DML-sætninger som nedenfor..

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

Årsager angives af Paul White her i hans detaljerede svar ..



  1. Forklar venligst delene af en PIVOT

  2. Hent MySQL-data i node.js (express) og udskriv ved hjælp af EJS

  3. kolonnedato kan ikke automatisk castes til tidsstempel med tidszone django/postgres

  4. Postgres aggregeringsfunktion til beregning af vektorgennemsnit af vindhastighed (vektorstørrelse) og vindretning (vektorretning)