Alternativy triggerů

Tvorba a optimalizace triggerů v SQL Serveru

Florin Angelescu

Instructor

Triggery vs. uložené procedury

Triggery

  • Spouštěny automaticky událostí
-- Will fire an INSERT trigger
INSERT INTO Orders [...];
  • Nepřijímají parametry ani transakce
  • Nemohou vracet hodnoty jako výstup

Uložené procedury

  • Spouštěny pouze explicitním voláním
-- Will run the stored procedure
EXECUTE sp_DailyMaintenance;
  • Přijímají vstupní parametry a transakce
  • Mohou vracet hodnoty jako výstup
Tvorba a optimalizace triggerů v SQL Serveru

Triggery vs. uložené procedury

Triggery

Použití:

  • auditování
  • vynucování integrity

Uložené procedury

Použití:

  • obecné úlohy
  • specifické potřeby uživatelů
Tvorba a optimalizace triggerů v SQL Serveru

Triggery vs. vypočítané sloupce

Triggery

  • výpočet hodnot sloupců
  • použití sloupců z jiných tabulek ve výpočtech
  • výpočet pomocí INSERT nebo UPDATE
    -- Used in the trigger body
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Vypočítané sloupce

  • výpočet hodnot sloupců
  • použití sloupců pouze ze stejné tabulky
  • výpočet definovaný při vytváření tabulky
    -- Column definition
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Tvorba a optimalizace triggerů v SQL Serveru

Příklad vypočítaného sloupce

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]
);
Tvorba a optimalizace triggerů v SQL Serveru

Trigger jako vypočítaný sloupec

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;
Tvorba a optimalizace triggerů v SQL Serveru

Porovnejme je v praxi!

Tvorba a optimalizace triggerů v SQL Serveru

Preparing Video For Download...