SQL Server 2008 en nieuwer hebben een MERGE-instructie die precies dat doet.
Zie de MSDN Books Online-documenten over MERGE voor details.
In principe heb je vier dingen nodig:
- een bron (tabel of weergave of inline SELECT-instructie)
- een doel
- een DOEN voorwaarde die de twee verbindt
- instructies voor gevallen waarin er een MATCH is (rijen bestaan in zowel bron als doel), NOT MATCHED (wanneer rij nog niet bestaat in het doel) enzovoort
Dus je definieert eigenlijk zoiets als:
MERGE (targettable) AS t
USING (sourcetable) AS s
ON (JOIN condition between s and t)
WHEN MATCHED THEN
UPDATE SET t.Col1 = s.Col1, t.Col2 = s.Col2 (etc.)
WHEN NOT MATCHED THEN
INSERT(Col1, Col2, ..., ColN) VALUES(s.Col1, s.Col2, ......, s.ColN)
Dit wordt gedaan als één statement en sterk geoptimaliseerd door SQL Server.