Alternative la triggere

Crearea și optimizarea triggerelor în SQL Server

Florin Angelescu

Instructor

Triggere vs. proceduri stocate

Triggere

  • Declanșate automat de un eveniment
-- Will fire an INSERT trigger
INSERT INTO Orders [...];
  • Nu acceptă parametri sau tranzacții
  • Nu pot returna valori ca ieșire

Proceduri stocate

  • Rulate doar la apelare explicită
-- Will run the stored procedure
EXECUTE sp_DailyMaintenance;
  • Acceptă parametri de intrare și tranzacții
  • Pot returna valori ca ieșire
Crearea și optimizarea triggerelor în SQL Server

Triggere vs. proceduri stocate

Triggere

Utilizate pentru:

  • auditare
  • aplicarea integrității

Proceduri stocate

Utilizate pentru:

  • sarcini generale
  • nevoi specifice utilizatorului
Crearea și optimizarea triggerelor în SQL Server

Triggere vs. coloane calculate

Triggere

  • calculează valorile coloanelor
  • utilizează coloane din alte tabele pentru calcule
  • INSERT sau UPDATE folosite pentru calcul
    -- Used in the trigger body
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Coloane calculate

  • calculează valorile coloanelor
  • utilizează coloane doar din același tabel pentru calcule
  • calculul definit la crearea tabelului
    -- Column definition
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Crearea și optimizarea triggerelor în SQL Server

Exemplu de coloană calculată

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]
);
Crearea și optimizarea triggerelor în SQL Server

Utilizarea unui trigger ca și coloană calculată

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;
Crearea și optimizarea triggerelor în SQL Server

Să le comparăm în practică!

Crearea și optimizarea triggerelor în SQL Server

Preparing Video For Download...