SQL Server Indonesia User Groups Community Berkenalan dengan Merge - drowned in code

SQL Server Indonesia User Groups Community

SQL Server Indonesia User Groups Community
Welcome to SQL Server Indonesia User Groups Community Sign in | Join | Help
in Search

drowned in code

eat, sleep, breath, SQL

Berkenalan dengan Merge

Merge adalah sebuah T-SQL Statement baru yang terdapat pada SQL Server 2008 yang digunakan untuk melakukan proses sinkronisasi antara dua buah table. Idenya seperti ini: satu table digunakan sebagai source dan table lainnya sebagai target. Dengan Merge, kita dapat melakukan sinkronisasi sehingga data yang terdapat pada target akan sama dengan yang terdapat pada source.

Contoh syntax sederhana Merge seperti ini:

MERGE

<table_target>

USING <table_source>

ON <merge_search_condition>

[ WHEN MATCHED [ AND <clause_search_condition> ]

THEN <merge_matched> ]

[ WHEN NOT MATCHED [ BY TARGET ] [ AND <clause_search_condition> ]

THEN <merge_not_matched> ]

[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]

THEN <merge_matched> ]

;

 

Keterangan:

<table_target>

table yang dijadikan target sinkronisasi

<table_source>

table yang dijadikan source sinkronisasi

<merge_search_condition>

kondisi join antara <table_target> dan <table_source>

WHEN MATCHED

kondisi pada saat row di <table_target> sama dengan <table_source> berdasarkan kondisi <merge_search_condition>

WHEN NOT MATCHED [BY TARGET]

kondisi pada saat row di <source_table> tidak terdapat di <target_table>

WHEN NOT MATCHED BY SOURCE

kondisi pada saat row di <target_table> tidak terdapat di <source_table>

 

Pada contoh berikut, saya akan membuat dua buah table yang diberi nama @oldtable dan @newtable dan berisi code dan quantity lalu melakukan merge sehingga data pada @oldtable menjadi sinkron dengan yang terdapat di @new table.

--deklarasi

declare @oldtable as table (code varchar(10), quantity int)

declare @newtable as table (code varchar(10), quantity int)

 

--insert data

insert @oldtable values ('prod1',100), ('prod2',200)

insert @newtable values ('prod1',500), ('prod3',300)

 

--merge data

merge @oldtable a

using @newtable b

on a.code = b.code

when not matched then

    insert (code, quantity) values (b.code, b.quantity)

when matched and a.quantity <> b.quantity then

    update set a.quantity = b.quantity

when not matched by source

    then delete

output $action, inserted.code, inserted.quantity, deleted.code, deleted.quantity

;

 

Apabila kita execute, akan terlihat row mana saja yang di-insert, update, dan delete.

 

Published Nov 25 2008, 12:08 AM by si_hendrik
Filed under:

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems