Créer des déclencheurs DML

Cette rubrique explique comment créer un déclencheur DML Transact-SQL à l'aide de SQL Server Management Studio et de l'instruction Transact-SQL CREATE TRIGGER.

Avant de commencer

Limitations et restrictions

Pour obtenir la liste des limitations et des restrictions liées à la création de déclencheurs DML, consultez CREATE TRIGGER (Transact-SQL).

Autorisations

Nécessite l'autorisation ALTER sur la table ou la vue sur laquelle le déclencheur est créé.

Comment créer un déclencheur DML

Vous pouvez utiliser l'un des éléments suivants :

  • SQL Server Management Studio

  • Transact-SQL

Utilisation de SQL Server Management Studio

  1. Dans l'Explorateur d'objets, connectez-vous à une instance du Moteur de base de données et développez-la.

  2. Développez successivement Bases de données, la base de données AdventureWorks2012 , Tables, puis la table Purchasing.PurchaseOrderHeader.

  3. Cliquez avec le bouton droit sur Déclencheurs, puis sélectionnez Nouveau déclencheur.

  4. Dans le menu Requête, cliquez sur Spécifier les valeurs des paramètres du modèle. Vous pouvez également appuyer sur CTRL-Maj-M pour ouvrir la boîte de dialogue Spécifier les valeurs des paramètres du modèle.

  5. Dans la boîte de dialogue Spécifier les valeurs des paramètres du modèle, entrez les valeurs suivantes pour les paramètres affichés.

    Paramètre

    Valeur

    Auteur

    Your name

    Date de création

    Today's date

    Description

    Vérifie le degré de solvabilité du fournisseur avant d'autoriser l'insertion d'une nouvelle commande fournisseur.

    Schema_name

    Purchasing

    Trigger_Name

    NewPODetail2

    Table_Name

    PurchaseOrderDetail

    Data_Modification_Statement

    Supprimez UPDATE et DELETE de la liste.

  6. Cliquez sur OK.

  7. Dans l'Éditeur de requête, remplacez le commentaire -- Insert statements for trigger here par l'instruction suivante :

    IF @@ROWCOUNT = 1
    BEGIN
       UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + LineTotal
       FROM inserted
       WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID
    
    END
    ELSE
    BEGIN
          UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + 
          (SELECT SUM(LineTotal)
          FROM inserted
          WHERE PurchaseOrderHeader.PurchaseOrderID
           = inserted.PurchaseOrderID)
       WHERE PurchaseOrderHeader.PurchaseOrderID IN
          (SELECT PurchaseOrderID FROM inserted)
    END;
    
  8. Pour vérifier la validité de la syntaxe, dans le menu Requête, cliquez sur Analyser. Si un message d'erreur est retourné, comparez l'instruction avec les informations ci-dessus, apportez les corrections nécessaires et répétez cette étape.

  9. Pour créer le déclencheur DML, dans le menu de Requête, cliquez sur Exécuter. Le déclencheur DML est créé en tant qu'objet dans la base de données.

  10. Pour afficher le déclencheur DML répertorié dans l'Explorateur d'objets, cliquez avec le bouton droit sur Déclencheurs, puis sélectionnez Actualiser.

[Haut de la page]

Utilisation de Transact-SQL

  1. Dans l'Explorateur d'objets, connectez-vous à une instance du Moteur de base de données et développez-la.

  2. Dans le menu Fichier, cliquez sur Nouvelle requête.

  3. Copiez et collez l'exemple suivant dans l'Éditeur de requête, puis cliquez sur Exécuter. Cet exemple crée le même déclencheur DML stocké que dans la procédure ci-dessus.

    -- Trigger valid for multirow and single row inserts
    -- and optimal for single row inserts.
    USE AdventureWorks2012;
    GO
    CREATE TRIGGER NewPODetail3
    ON Purchasing.PurchaseOrderDetail
    FOR INSERT AS
    IF @@ROWCOUNT = 1
    BEGIN
       UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + LineTotal
       FROM inserted
       WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID
    
    END
    ELSE
    BEGIN
          UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + 
          (SELECT SUM(LineTotal)
          FROM inserted
          WHERE PurchaseOrderHeader.PurchaseOrderID
           = inserted.PurchaseOrderID)
       WHERE PurchaseOrderHeader.PurchaseOrderID IN
          (SELECT PurchaseOrderID FROM inserted)
    END;
    

[Haut de la page]