Ana içeriğe geç
Kesit SQL
İleri · T-SQL (SQL Server)

SQL Server trigger'ları: inserted ve deleted

Küme bazlı tetikleyiciler ve denetim kaydı (audit).

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

inserted ve deleted sanal tabloları

İşleminserteddeleted
INSERTYeni satırlarBoş
UPDATEYeni değerlerEski değerler
DELETEBoşSilinen satırlar

SQL Server trigger'ı ifade başına bir kez çalışır; bu tablolar etkilenen tüm satırları içerir. Bu yüzden her zaman küme bazlı (JOIN ile) yaz.

CREATE TABLE order_audit (
    order_id   INT,
    old_status NVARCHAR(20),
    new_status NVARCHAR(20),
    changed_at DATETIME2 DEFAULT SYSDATETIME()
);
GO
CREATE TRIGGER trg_order_status ON orders
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO order_audit (order_id, old_status, new_status)
    SELECT d.order_id, d.status, i.status
    FROM deleted d
    JOIN inserted i ON i.order_id = d.order_id
    WHERE d.status <> i.status;
END;
GO
UPDATE orders SET status = 'delivered'
WHERE status = 'shipped' AND order_date < '2024-12-01';

SELECT order_id, old_status, new_status FROM order_audit ORDER BY order_id;
INSTEAD OF triggerAsıl işlemin yerine çalışır; çoğunlukla birden çok tabloya dayanan view'ları güncellenebilir yapmak için kullanılır. Bu taklitte AFTER trigger'lar desteklenir.
AlternatiflerDenetim kaydı için SQL Server'ın yerleşik Temporal Tables (sistem sürümlü tablolar), Change Data Capture ve SQL Server Audit özellikleri trigger'dan daha az bakım gerektirir.
Alıştırmalara geç (3)