Partager via


Créer des déclencheurs DML

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Cet article explique comment créer un déclencheur DML (Data Manipulation Language) Transact-SQL avec SQL Server Management Studio ou l’instruction CREATE TRIGGER Transact-SQL.

Les exemples de code de cet article utilisent les bases de données d'exemple AdventureWorks2025 ou AdventureWorksDW2025, que vous pouvez télécharger à partir de la page d'accueil Microsoft SQL Server Samples and Community Projects.

Limites

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

autorisations

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

Comment créer un déclencheur DML

Vous pouvez utiliser l’une des méthodes suivantes :

Utilisez 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, développez la AdventureWorks2025 base de données, développez 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 , sélectionnez Spécifier des valeurs pour les paramètres de modèle. Vous pouvez aussi 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
    Author Votre nom
    Créer une date La date d’aujourd’hui
    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 et UPDATE dans DELETE 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 , sélectionnez Analyse. Si un message d’erreur est retourné, comparez l’instruction au bloc de code précédent, corrigez le cas échéant et répétez cette étape.

  9. Pour créer le déclencheur DML, dans le menu Requête , sélectionnez 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 dans l’Explorateur d’objets, cliquez avec le bouton droit sur Déclencheurs , puis sélectionnez Actualiser.

Utiliser 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 , sélectionnez Nouvelle requête.

  3. Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple crée le même déclencheur DML stocké que précédemment. Le déclencheur est valide pour les insertions de plusieurs lignes et de lignes uniques et optimales pour les insertions de lignes uniques.

    USE AdventureWorks2022;
    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;