sql >> Databasteknik >  >> RDS >> Sqlserver

Uppdatera och infoga i en tabell från en annan

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

Det finns vissa problem med Merge-satsen, så den bör användas med varning ..

Vidare rekommenderar jag att du använder merge som två separata DML-satser som nedan...

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

Orsaker som anges av Paul White här i hans detaljerade svar ..



  1. Hur WEIGHT_STRING() fungerar i MariaDB

  2. DATEDIFF - Ersätt NULL med NOW()

  3. SQL CASE-sats:Vad är det och vilka är de bästa sätten att använda den?

  4. Undviker kapslade frågor