Partager via


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 à l’aide de l’instruction CREATE TRIGGER Transact-SQL.

Avant de commencer

Limitations et restrictions

Pour obtenir la liste des limitations et 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 où le déclencheur est créé.

Guide pratique pour créer un déclencheur DML

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

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 Bases de données, ouvrez la base de données AdventureWorks2012, étendez Tables, puis développez 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 Définir les valeurs des paramètres de modèle. Vous pouvez également appuyer sur (Ctrl-Shift-M) pour ouvrir la boîte de dialogue Spécifier des valeurs pour les 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 Votre nom
    Date de création La date d’aujourd’hui
    Descriptif Vérifie la cote de crédit du fournisseur avant d’autoriser l’insertion d’une nouvelle commande auprès du fournisseur.
    Schema_Name Achats
    Trigger_Name (Nom du déclencheur) NewPODetail2
    Nom_de_table Détail de la Commande d'Achat
    Déclaration_de_Modification_de_Données 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 que la syntaxe est valide, dans le menu Requête , cliquez sur Analyse. Si un message d’erreur est retourné, comparez l’instruction aux informations ci-dessus et corrigez les besoins et répétez cette étape.

  9. Pour créer le déclencheur DML, dans le menu 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 et sélectionnez Actualiser.

Avant de commencer

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 la fenêtre de requête, puis cliquez sur Exécuter. Cet exemple crée le même déclencheur DML stocké que 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;