Saklanan prosedürler (stored procedures) — açıkça çağrılan, parametre alabilen, karmaşık iş mantığını, işlemeleri gerçekleştirebilen ve veri setleri veya çıkış parametreleri döndürebilen programlanabilir bloklardır.
Tetikleyiciler (triggers) — veri değişikliği olayları (INSERT, UPDATE, DELETE) üzerinde "otomatik" olarak tetiklenen özel nesnelerdir ve belirli tablolar üzerinde belirli eylemler gerçekleştiğinde belirlenen mantığın şeffaf bir şekilde çalışmasını sağlarlar.
Prosedürlerin ne zaman kullanılacağı
Tetikleyicilerin ne zaman kullanılacağı
Saklanan prosedür:
CREATE PROCEDURE UpdateProductPrice @ProductID int, @NewPrice money AS BEGIN UPDATE Products SET Price = @NewPrice WHERE ProductID = @ProductID; END
Tetikleyici:
CREATE TRIGGER trg_ProductsPriceChange ON Products AFTER UPDATE AS BEGIN INSERT INTO PriceAuditLog(ProductID, OldPrice, NewPrice, ChangeDate) SELECT i.ProductID, d.Price, i.Price, GETDATE() FROM inserted i JOIN deleted d ON i.ProductID = d.ProductID WHERE i.Price <> d.Price END
S: SQL Server'da bir tabloda birden fazla AFTER tetikleyici için çalışma sırasını standart araçlarla belirlemek mümkün mü?
C: Hayır, SQL standardı aynı tabloda benzer yönde olan AFTER tetikleyicilerin çalışma sırasını garanti etmez. Sıra önemliyse, bunlar birleştirilmelidir.
Hikaye
CRM çözümünde, değişim geçmişi işlevselliğini desteklemek için tetikleyiciler kullanıldı. Toplu güncellemeler nedeniyle, güncellemeler gecikmeli olarak kayıt altına alındı ve "canlı" işlemleri engelleyerek hizmetin geçici olarak erişilemez olmasına neden oldu.
Hikaye
Geliştirici, veri kontrol mantığını prosedürde değil, tetikleyicide oluşturarak, kullanıcı değişikliklerini anında göreceğini düşündü. Tetikleyicinin "şeffaf" olduğunu unutarak, iş mantığının belirsiz hale geldiği ("büyü") ve hata ayıklamanın zorlaştığı bir durumla karşılaştı.
Hikaye
Önemli: Genellikle bir prosedür, tetikleyici içinde çağrılır ya da tetikleyici, prosedürden çağrılır; bu da özyinelemeye ve derinlik sınırının aşılmasına yol açar — örneğin, otomatik ekleme, ilişkili prosedür aracılığıyla tetikleyicinin tekrar çalışmasına neden olur.