SQL Server

Merge Statement in SQL Server 2008

Salah satu fitur baru di SQL Server 2008 dalam T-SQL adalah ‘Merge Statement’.  Merge Statement memungkinkan programmer melakukan statement insert, update dan delete dalam 1 buah statement.

Cara klasik yang biasa digunakan untuk bisa melakukan sebuah proses insert, update dan delete dalam satu statement adalah dengan cara membuat sebuah store procedure. Pekerjaan ini sekarang dapat digantikan dengan melakukan T-SQL biasa, yaitu menggunakan Merge Statement.

Merge Statement ini memerlukan sebuah source table/view sebagai acuan untuk melakukan operasi insert, update, delete pada tabel/view target. kedua table/view tersebut harus memiliki sebuah relational melalui Join Condition.

Saya akan coba berikan sebuah ilustrasi agar dapat memahami Merge Statement.

saya menyiapkan sebuah tabel Purchases yang berisi pencatatan pembelian oleh customer pada satu atau beberapa produk yang terjadi minggu Ini.

USE AdventureWorks;
GO
IF OBJECT_ID (N'dbo.Purchases', N'U') IS NOT NULL 
    DROP TABLE dbo.Purchases;
GO
CREATE TABLE dbo.Purchases (
    ProductID int, CustomerID int, PurchaseDate datetime, 
    CONSTRAINT PK_PurchProdID PRIMARY KEY(ProductID,CustomerID));
GO
INSERT INTO dbo.Purchases VALUES(707, 11794, '20060821'),
(707, 15160, '20060825'),(708, 18529, '20060821'),
(711, 11794, '20060821'),(711, 19585, '20060822'),
(712, 14680, '20060825'),(712, 21524, '20060825'),
(712, 19072, '20060821'),(870, 15160, '20060823'),
(870, 11927, '20060824'),(870, 18749, '20060825');
GO
tabel purchases ini adalah sebagai source.

Kemudian didalam sebuah datawarehouse, ada sebuah tabel FactBuyingHabits yang memiliki fungsi merekam tanggal pembelian  terakhir yang dilakukan oleh customer pada spesific product. Update data terakhir tabel FactBuyingHabits adalah minggu lalu. Tabel FactBuyingHabits dalam kasus ini kita jadikan sebagai tabel target.

Berikut ini adalah T-SQL untuk membuat tabel FactBuyingHabits

USE AdventureWorks;
GO
IF OBJECT_ID (N'dbo.FactBuyingHabits', N'U') IS NOT NULL 
    DROP TABLE dbo.FactBuyingHabits;
GO
CREATE TABLE dbo.FactBuyingHabits (
    ProductID int, CustomerID int, LastPurchaseDate datetime, 
    CONSTRAINT PK_FactProdID PRIMARY KEY(ProductID,CustomerID));
GO
INSERT INTO dbo.FactBuyingHabits VALUES(707, 11794, '20060814'),
(707, 18178, '20060818'),(864, 14114, '20060818'),
(866, 13350, '20060818'),(866, 20201, '20060815'),
(867, 20201, '20060814'),(869, 19893, '20060815'),
(870, 17151, '20060818'),(870, 15160, '20060817'),
(871, 21717, '20060817'),(871, 21163, '20060815'),
(871, 13350, '20060815'),(873, 23381, '20060815');
GO

Bila kita perhatikan, didalam tabel purchases, customer no 11794 membeli sebuah product berkode 707, kejadian ini memiliki kesamaan dengan transaksi yang terjadi minggu lalu yang tercatat di tabel FactBuyingHabits . dalam hal ini, proses yang terjadi adalah proses update. data dari tabel Purchases akan mengupdate tabel FactBuyingHabits untuk customer no 11794 yang membeli sebuah product berkode 707. hal yang juga terjadi pada customer no 15160 yang membeli sebuah product berkode 870.
Sedangkan data yang lain pada tabel Purchases akan dilakukan proses insert ke tabel FactBuyingHabits .
Ilustrasi diatas dapat diselesaikan dengan menggunakan Merge Statement. sehingga dengan sebuah statement saja, kita dapat melakukan proses update dan insert.
Berikut ini adalah T-SQL nya :
MERGE dbo.FactBuyingHabits AS Target
USING (SELECT CustomerID, ProductID, PurchaseDate FROM dbo.Purchases) AS Source
ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID)
WHEN MATCHED THEN
    UPDATE SET Target.LastPurchaseDate = Source.PurchaseDate
WHEN NOT MATCHED BY TARGET THEN
    INSERT (CustomerID, ProductID, LastPurchaseDate)
    VALUES (Source.CustomerID, Source.ProductID, Source.PurchaseDate)
OUTPUT $action, Inserted.*, Deleted.*;
Simple bukan 😉
Selamat mencoba.
admin

View Comments

Recent Posts

Workshop GIS di PT. AIR MINUM INTAN BANJAR (PERSERODA)

Alhamdulillah telah dipercaya untuk memberikan workshop GIS dengan menggunakan perangkat lunak QGIS di PT. AIR…

3 years ago

Workshop GIS di PERUMDA AM Tirta Ratu Samban

Terimakasih atas kepercayaannya kepada kami sehingga terselenggara Workshop QGIS utk PERUMDA AM Tirta Ratu Samba…

3 years ago

Workshop QGIS Online di Tirta Kahuripan

terimakasih atas kepercayaan Perumda Tirta Kahuripan Kab Bogor kepada saya utk mengimplementasikan GIS Online yang…

3 years ago

Digitasi Vector Menggunakan Spesific Length, Angles or Coordinates

Para operator #GIS kadang mendapatkan sebuah gambar situasi yang diperoleh dari kondisi dilapangan yang kemudian…

4 years ago

Video Seri Belajar Snapping di QGIS

Snapping di QGIS. teknik ini sifatnya wajib untuk dikuasai oleh para operator QGIS dalam kegiatan…

4 years ago

Video Seri Belajar EPANET

Epanet (Environmental Protection Agency Network ) adalah sebuah program komputer yang memiliki kemampuan melaksanakan simulasi…

4 years ago