Alternatywy dla triggerów

Tworzenie i optymalizacja triggerów w SQL Server

Florin Angelescu

Instructor

Triggery a procedury składowane

Triggery

  • Wywoływane automatycznie przez zdarzenie
-- Will fire an INSERT trigger
INSERT INTO Orders [...];
  • Nie obsługują parametrów ani transakcji
  • Nie mogą zwracać wartości

Procedury składowane

  • Wywoływane tylko jawnie
-- Will run the stored procedure
EXECUTE sp_DailyMaintenance;
  • Obsługują parametry wejściowe i transakcje
  • Mogą zwracać wartości
Tworzenie i optymalizacja triggerów w SQL Server

Triggery a procedury składowane

Triggery

Zastosowanie:

  • audyt
  • wymuszanie integralności

Procedury składowane

Zastosowanie:

  • zadania ogólne
  • potrzeby specyficzne dla użytkownika
Tworzenie i optymalizacja triggerów w SQL Server

Triggery a kolumny obliczeniowe

Triggery

  • obliczają wartości kolumn
  • używają kolumn z innych tabel do obliczeń
  • obliczenia wykonywane przez INSERT lub UPDATE
    -- Used in the trigger body
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Kolumny obliczeniowe

  • obliczają wartości kolumn
  • używają kolumn tylko z tej samej tabeli
  • obliczenia definiowane podczas tworzenia tabeli
    -- Column definition
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Tworzenie i optymalizacja triggerów w SQL Server

Przykład kolumny obliczeniowej

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]
);
Tworzenie i optymalizacja triggerów w SQL Server

Trigger jako kolumna obliczeniowa

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;
Tworzenie i optymalizacja triggerów w SQL Server

Porównajmy je w praktyce!

Tworzenie i optymalizacja triggerów w SQL Server

Preparing Video For Download...