Sinkronisasi Data Menggunakan Query SQL

Mau melakukan synchronize data antar table di database/ server yang beda?
Ada banyak cara memang, mulai dari bandingin key-nya terus hapus dulu kemudian insert ulang; atau bandingin satu-satu menggunakan cursor…. atau cara lain.

Sebetulnya untuk sync data bisa menggunakan perintah MERGE. Tapi harap diingat, MERGE ini merupakan fitur yang diperkenalkan pada SQL Server 2008, jadi kalau menggunakan SQL Server 2005 atau lebih tua lagi, gunakan cara tradisional. Seperti apa syntaxnya?

MERGE NamaTableTujuanSync as NamaAlias(t)
USING NamaTableSource as NamaAlias(s)
ON KeyJoinNya
WHEN MATCHED and (t.Kolom1 != s.Kolom1 or t.Kolom2 != s.Kolom2 …)
THEN UPDATE SET t.Kolom1 = s.Kolom2 …
WHEN NOT MATCHED BY SOURCE
THEN ….
WHEN NOT MATCHED BY TARGET
THEN INSERT Values (s.Kolom1, s.Kolom2, …);

Perhatikan tanda titik koma di akhir statement MERGE!

Lebih jelasnya perhatikan contoh berikut:

merge FactOmzet as t
using #FactOmzet as s
on t.NoKwitansi = s.NoKwitansi
when MATCHED and (t.KodeCustomer != s.KodeCustomer or t.TanggalOmzet != s.TanggalOmzet
or t.TotalOmzetSebelumPPN != s.TotalOmzetSebelumPPN or t.PPN != s.PPN
or t.KeteranganInvoice != s.KeteranganInvoice)
then update set t.KodeCustomer = s.KodeCustomer, t.TanggalOmzet = s.TanggalOmzet,
t.TotalOmzetSebelumPPN = s.TotalOmzetSebelumPPN, t.PPN = s.PPN, t.KeteranganInvoice = s.KeteranganInvoice
when NOT MATCHED by SOURCE
then delete
when NOT MATCHED by TARGET
then insert values (s.NoKwitansi, s.KodeCustomer, s.TanggalOmzet, s.TotalOmzetSebelumPPN, s.PPN, s.KeteranganInvoice);

Penjelasan:
– 2 table itu key-nya NoKwitansi. Key ini sebagai dasar perbandingan.
– when MATCHED and (t.KodeCustomer != s.KodeCustomer >> Kalau cocok key-nya(di target ada dan di source juga ada), bandingin tiap kolom isinya beda atau tidak. Kalau beda, data di-update di table target sesuai data di source
– when NOT MATCHED by SOURCE >> kalau data hanya ada di target tapi di source tidak ada, maka data di target dihapus
– when NOT MATCHED by TARGET >> Data tidak ada di target, di source ada maka data di insert ke target

Nah contoh di atas itu MERGE yang digunakan hanya satu arah. Jadi kalau tidak ada di source tapi ada data di target maka datanya dihapus dari target (when NOT MATCHED by SOURCE then delete).

Leave a Reply

Your email address will not be published. Required fields are marked *