Alternativ till triggers

Bygga och optimera triggers i SQL Server

Florin Angelescu

Instructor

Triggers vs. lagrade procedurer

Triggers

  • Aktiveras automatiskt av en händelse
-- Will fire an INSERT trigger
INSERT INTO Orders [...];
  • Tillåter inte parametrar eller transaktioner
  • Kan inte returnera värden som utdata

Lagrade procedurer

  • Körs bara vid explicit anrop
-- Will run the stored procedure
EXECUTE sp_DailyMaintenance;
  • Tar emot indataparametrar och transaktioner
  • Kan returnera värden som utdata
Bygga och optimera triggers i SQL Server

Triggers vs. lagrade procedurer

Triggers

Används för:

  • granskning
  • integritetskontroll

Lagrade procedurer

Används för:

  • allmänna uppgifter
  • användarspecifika behov
Bygga och optimera triggers i SQL Server

Triggers vs. beräknade kolumner

Triggers

  • beräknar kolumnvärden
  • använder kolumner från andra tabeller i beräkningar
  • INSERT eller UPDATE används för beräkning
    -- Used in the trigger body
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Beräknade kolumner

  • beräknar kolumnvärden
  • använder kolumner endast från samma tabell i beräkningar
  • beräkningen definieras när tabellen skapas
    -- Column definition
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Bygga och optimera triggers i SQL Server

Exempel på en beräknad kolumn

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]
);
Bygga och optimera triggers i SQL Server

Använda en trigger som beräknad kolumn

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;
Bygga och optimera triggers i SQL Server

Nu jämför vi dem i praktiken!

Bygga och optimera triggers i SQL Server

Preparing Video For Download...