Tetikleyici alternatifleri

SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Florin Angelescu

Instructor

Tetikleyiciler vs. saklı yordamlar

Tetikleyiciler

  • Bir olayla otomatik tetiklenir
-- INSERT tetikleyicisini tetikler
INSERT INTO Orders [...];
  • Parametre veya işlem (transaction) almaz
  • Çıktı değeri döndüremez

Saklı yordamlar

  • Yalnızca açıkça çağrıldığında çalışır
-- Saklı yordamı çalıştırır
EXECUTE sp_DailyMaintenance;
  • Girdi parametreleri ve işlemler alır
  • Çıktı değeri döndürebilir
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyiciler vs. saklı yordamlar

Tetikleyiciler

Şunlar için kullanılır:

  • denetim (auditing)
  • bütünlük sağlama

Saklı yordamlar

Şunlar için kullanılır:

  • genel görevler
  • kullanıcıya özel ihtiyaçlar
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Tetikleyiciler vs. hesaplanan sütunlar

Tetikleyiciler

  • sütun değerlerini hesaplar
  • hesaplama için diğer tablolardaki sütunları kullanabilir
  • hesaplama için INSERT veya UPDATE kullanılır
    -- Tetikleyici gövdesinde kullanılır
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Hesaplanan sütunlar

  • sütun değerlerini hesaplar
  • hesaplama için yalnızca aynı tablodaki sütunları kullanır
  • hesaplama tablo oluşturulurken tanımlanır
    -- Sütun tanımı
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Hesaplanan sütun örneği

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]
);
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Hesaplanan sütun olarak tetikleyici kullanma

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;
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Bunları uygulamada karşılaştıralım!

SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme

Preparing Video For Download...