MERGE
diperkenalkan di SQL Server 2008. Jika Anda ingin menggunakan sintaks itu, Anda harus memutakhirkan.
Jika tidak, pendekatan tipikal akan bergantung pada dari mana sumber data berasal. Jika hanya satu baris dan Anda tidak tahu apakah Anda perlu memperbarui atau menyisipkan, Anda mungkin akan melakukannya:
UPDATE ... WHERE key = @key;
IF @@ROWCOUNT = 0
BEGIN
INSERT ...
END
Jika sumber Anda adalah tabel #temp, variabel tabel, TVP, atau tabel lainnya, Anda dapat melakukan:
UPDATE dest SET ...
FROM dbo.destination AS dest
INNER JOIN dbo.source AS src
ON dest.key = src.key;
INSERT dbo.destination SELECT ... FROM dbo.source AS src
WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);
Seperti halnya MERGE
(dan seperti yang Michael Swart didemonstrasikan di sini
), Anda masih ingin mengelilingi salah satu metode ini dengan transaksi yang tepat, penanganan kesalahan, dan tingkat isolasi agar berperilaku seperti operasi tunggal yang sebenarnya. Bahkan satu MERGE
pernyataan tidak melindungi Anda dari konkurensi.
Saya telah menerbitkan beberapa peringatan lain tentang MERGE di lebih detail di sini .