SQL Server 2008 y posteriores tienen una instrucción MERGE que hace exactamente eso.
Consulte los documentos de MSDN Books Online sobre MERGE para más detalles.
Básicamente, necesitas cuatro cosas:
- una fuente (tabla o vista o instrucción SELECT en línea)
- un objetivo
- un ÚNETE condición que une a los dos
- declaraciones para casos en los que hay COINCIDENCIA (existen filas tanto en el origen como en el destino), NO COINCIDIDAS (cuando la fila aún no existe en el destino), etc.
Así que básicamente defines algo como:
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)
Esto se hace como una declaración y altamente optimizado por SQL Server.