SQL Server 2008 et les versions ultérieures ont une instruction MERGE qui fait exactement cela.
Consultez la documentation MSDN Books Online sur MERGE pour plus de détails.
Fondamentalement, vous avez besoin de quatre éléments :
- une source (table ou vue ou instruction SELECT en ligne)
- une cible
- une JOINTURE condition qui relie les deux
- instructions pour les cas où il y a un MATCH (les lignes existent à la fois dans la source et la cible), NOT MATCHED (lorsque la ligne n'existe pas encore dans la cible) et ainsi de suite
Donc, vous définissez essentiellement quelque chose comme :
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)
Ceci est fait en une seule instruction et hautement optimisé par SQL Server.