SQL Server 2008 i nowsze mają instrukcję MERGE, która dokładnie to robi.
Zobacz dokumentację MSDN Books Online dotyczącą MERGE po szczegóły.
Zasadniczo potrzebujesz czterech rzeczy:
- źródło (tabela lub widok lub wbudowana instrukcja SELECT)
- cel
- DOŁĄCZ warunek, który łączy te dwie rzeczy
- wypowiedzi dotyczące przypadków, w których występuje DOPASOWANIE (wiersze istnieją zarówno w źródle, jak i celu), NIE DOPASOWANE (gdy wiersz nie istnieje jeszcze w miejscu docelowym) i tak dalej
Więc zasadniczo definiujesz coś takiego:
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)
Odbywa się to jako jedno polecenie i wysoce zoptymalizowane przez SQL Server.