Autres solutions aux déclencheurs

Création et optimisation de déclencheurs dans SQL Server

Florin Angelescu

Instructor

Déclencheurs vs procédures stockées

Déclencheurs

  • Déclenchés automatiquement par un événement
-- Déclenchera un déclencheur INSERT
INSERT INTO Orders [...];
  • N'acceptent pas de paramètres ni de transactions
  • Ne peuvent pas retourner de valeurs en sortie

Procédures stockées

  • S'exécutent seulement quand elles sont appelées explicitement
-- Exécutera la procédure stockée
EXECUTE sp_DailyMaintenance;
  • Acceptent des paramètres d'entrée et des transactions
  • Peuvent retourner des valeurs en sortie
Création et optimisation de déclencheurs dans SQL Server

Déclencheurs vs procédures stockées

Déclencheurs

Utilisés pour :

  • audit
  • application de l'intégrité

Procédures stockées

Utilisées pour :

  • tâches générales
  • besoins propres aux utilisateurs
Création et optimisation de déclencheurs dans SQL Server

Déclencheurs vs colonnes calculées

Déclencheurs

  • calculer des valeurs de colonnes
  • utiliser des colonnes d'autres tables pour les calculs
  • INSERT ou UPDATE utilisés pour calculer
    -- Utilisé dans le corps du déclencheur
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Colonnes calculées

  • calculer des valeurs de colonnes
  • utiliser des colonnes du même tableau seulement pour les calculs
  • calcul défini lors de la création du tableau
    -- Définition de la colonne
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Création et optimisation de déclencheurs dans SQL Server

Exemple de colonne calculée

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]
);
Création et optimisation de déclencheurs dans SQL Server

Utiliser un déclencheur comme colonne calculée

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;
Création et optimisation de déclencheurs dans SQL Server

Comparons-les en pratique !

Création et optimisation de déclencheurs dans SQL Server

Preparing Video For Download...