SQL Server 2008 и по-нови имат оператор MERGE, който прави точно това.
Вижте MSDN Books Online документите на MERGE за подробности.
По принцип имате нужда от четири неща:
- източник (таблица или изглед или вграден оператор SELECT)
- цел
- а СЕ ПРИСЪЕДИНЕТЕ условие, което свързва двете
- изявления за случаите, когато има СЪОТВЕТСТВИЕ (редовете съществуват както в източника, така и в целта), НЕ СЪВСТВЕТЯВАТ (когато редът все още не съществува в целта) и т.н.
Така че основно дефинирате нещо като:
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)
Това се прави като един израз и е силно оптимизирано от SQL Server.