SQL Server 2008 và mới hơn có câu lệnh MERGE thực hiện chính xác điều đó.
Xem Tài liệu trực tuyến về Sách MSDN trên MERGE để biết chi tiết.
Về cơ bản, bạn cần bốn điều:
- một nguồn (bảng hoặc chế độ xem hoặc câu lệnh SELECT nội tuyến)
- một mục tiêu
- a THAM GIA điều kiện liên kết cả hai
- câu lệnh cho các trường hợp có MATCH (các hàng tồn tại trong cả nguồn và đích), KHÔNG PHÙ HỢP (khi hàng chưa tồn tại trong mục tiêu), v.v.
Vì vậy, về cơ bản bạn xác định một cái gì đó như:
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)
Điều này được thực hiện như một câu lệnh và được tối ưu hóa cao bởi SQL Server.