Alternatif trigger

Membangun dan Mengoptimalkan Trigger di SQL Server

Florin Angelescu

Instructor

Trigger vs. prosedur tersimpan

Trigger

  • Dipicu otomatis oleh suatu peristiwa
-- Akan memicu trigger INSERT
INSERT INTO Orders [...];
  • Tidak mendukung parameter atau transaksi
  • Tidak dapat mengembalikan nilai keluaran

Prosedur tersimpan

  • Berjalan hanya saat dipanggil eksplisit
-- Akan menjalankan prosedur tersimpan
EXECUTE sp_DailyMaintenance;
  • Mendukung parameter masukan dan transaksi
  • Dapat mengembalikan nilai keluaran
Membangun dan Mengoptimalkan Trigger di SQL Server

Trigger vs. prosedur tersimpan

Trigger

Digunakan untuk:

  • audit
  • penegakan integritas

Prosedur tersimpan

Digunakan untuk:

  • tugas umum
  • kebutuhan spesifik pengguna
Membangun dan Mengoptimalkan Trigger di SQL Server

Trigger vs. kolom terhitung

Trigger

  • menghitung nilai kolom
  • menggunakan kolom dari tabel lain untuk perhitungan
  • INSERT atau UPDATE dipakai untuk menghitung
    -- Digunakan dalam isi trigger
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Kolom terhitung

  • menghitung nilai kolom
  • menggunakan kolom hanya dari tabel yang sama untuk perhitungan
  • perhitungan didefinisikan saat membuat tabel
    -- Definisi kolom
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Membangun dan Mengoptimalkan Trigger di SQL Server

Contoh kolom terhitung

CREATE TABLE [SalesWithPrice]
(
    [OrderID] INT IDENTITY(1,1),
    [Customer] NVARCHAR(50),
    [Product] NVARCHAR(50),
    [Price] DECIMAL(10,2),
    [Currency] NVARCHAR(3),
    [Quantity] INT,
    [OrderDate] DATE DEFAULT (GETDATE()),
    [TotalAmount] AS [Quantity] * [Price]
);
Membangun dan Mengoptimalkan Trigger di SQL Server

Menggunakan trigger sebagai kolom terhitung

CREATE TRIGGER [SalesCalculateTotalAmount]
ON [SalesWithoutPrice]
AFTER INSERT
AS
    UPDATE [sp]
    SET [sp].[TotalAmount] = [sp].[Quantity] * [p].[Price]
    FROM [SalesWithoutPrice] AS [sp]
    INNER JOIN [Products] AS [p] ON [sp].Product = [p].[Product]
    WHERE [sp].[TotalAmount] IS NULL;
Membangun dan Mengoptimalkan Trigger di SQL Server

Ayo bandingkan dalam praktik!

Membangun dan Mengoptimalkan Trigger di SQL Server

Preparing Video For Download...