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
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
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.*;
Alhamdulillah telah dipercaya untuk memberikan workshop GIS dengan menggunakan perangkat lunak QGIS di PT. AIR…
Terimakasih atas kepercayaannya kepada kami sehingga terselenggara Workshop QGIS utk PERUMDA AM Tirta Ratu Samba…
terimakasih atas kepercayaan Perumda Tirta Kahuripan Kab Bogor kepada saya utk mengimplementasikan GIS Online yang…
Para operator #GIS kadang mendapatkan sebuah gambar situasi yang diperoleh dari kondisi dilapangan yang kemudian…
Snapping di QGIS. teknik ini sifatnya wajib untuk dikuasai oleh para operator QGIS dalam kegiatan…
Epanet (Environmental Protection Agency Network ) adalah sebuah program komputer yang memiliki kemampuan melaksanakan simulasi…
View Comments
Makasih banget ya pak. Benar-benar membantu. Saya agak bingung katika baca sumber yg bahasa inggris :)
Ok, sama2, semoga bermanfaat
Mas izin bertanya, saya baru menggunakan sql server
sintaks ini, maksudnya untuk apa yaa ?
IF OBJECT_ID (N'dbo.Purchases', N'U') IS NOT NULL
DROP TABLE dbo.Purchases;