SQL Server 2008 a novější mají příkaz MERGE, který přesně to dělá.
Podívejte se na dokumenty MSDN Books Online o MERGE pro podrobnosti.
V zásadě potřebujete čtyři věci:
- zdroj (tabulka nebo zobrazení nebo vložený příkaz SELECT)
- cíl
- a PŘIPOJIT SE stav, který tyto dva spojuje
- příkazy pro případy, kdy existuje SHODA (řádky existují jak ve zdroji, tak v cíli), NOT MATCHED (když řádek v cíli ještě neexistuje) a tak dále
Takže v podstatě definujete něco jako:
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)
To se provádí jako jeden příkaz a je vysoce optimalizováno serverem SQL.