SQL Server 2008 og nyere har en MERGE-sætning, som gør præcis det.
Se MSDN Books Online-dokumenterne på MERGE for detaljer.
Grundlæggende har du brug for fire ting:
- en kilde (tabel eller visning eller inline SELECT-sætning)
- et mål
- a JOIN tilstand, der forbinder de to
- udsagn for tilfælde, hvor der er en MATCH (rækker findes i både kilde og mål), IKKE MATCHED (når række endnu ikke eksisterer i målet) og så videre
Så du definerer grundlæggende noget som:
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)
Dette gøres som én sætning og meget optimeret af SQL Server.