Alternatieven voor triggers

Triggers in SQL Server bouwen en optimaliseren

Florin Angelescu

Instructor

Triggers vs. stored procedures

Triggers

  • Worden automatisch geactiveerd door een event
-- Activeert een INSERT-trigger
INSERT INTO Orders [...];
  • Ondersteunen geen parameters of transacties
  • Kunnen geen waarden teruggeven

Stored procedures

  • Draaien alleen als je ze expliciet aanroept
-- Voert de stored procedure uit
EXECUTE sp_DailyMaintenance;
  • Accepteren invoerparameters en transacties
  • Kunnen waarden teruggeven
Triggers in SQL Server bouwen en optimaliseren

Triggers vs. stored procedures

Triggers

Gebruikt voor:

  • auditing
  • afdwingen van integriteit

Stored procedures

Gebruikt voor:

  • algemene taken
  • gebruikersspecifieke behoeften
Triggers in SQL Server bouwen en optimaliseren

Triggers vs. berekende kolommen

Triggers

  • kolomwaarden berekenen
  • kolommen uit andere tabellen gebruiken
  • INSERT of UPDATE triggert de berekening
    -- In de trigger body
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Berekende kolommen

  • kolomwaarden berekenen
  • gebruiken alleen kolommen uit dezelfde tabel
  • berekening gedefinieerd bij het maken van de tabel
    -- Kolomdefinitie
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Triggers in SQL Server bouwen en optimaliseren

Voorbeeld van een berekende kolom

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]
);
Triggers in SQL Server bouwen en optimaliseren

Een trigger gebruiken als berekende kolom

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;
Triggers in SQL Server bouwen en optimaliseren

Laten we ze in de praktijk vergelijken!

Triggers in SQL Server bouwen en optimaliseren

Preparing Video For Download...