Delen via


DML-triggers maken

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

In dit onderwerp wordt beschreven hoe u een Transact-SQL DML-trigger maakt met behulp van SQL Server Management Studio en met behulp van de instructie Transact-SQL CREATE TRIGGER.

Voordat u begint

Beperkingen en beperkingen

Zie CREATE TRIGGER (Transact-SQL)voor een lijst met beperkingen en beperkingen met betrekking tot het maken van DML-triggers.

Machtigingen

Vereist ALTER-machtigingen voor de tabel of weergave waarop de trigger wordt gemaakt.

Een DML-trigger maken

U kunt een van de volgende opties gebruiken:

SQL Server Management Studio gebruiken

  1. Maak in Objectverkennerverbinding met een exemplaar van Database Engine en breid dat exemplaar vervolgens uit.

  2. Vouw databasesuit, vouw de AdventureWorks2022 database uit, vouw tabellen uit en vouw vervolgens de tabel Purchase.PurchaseOrderHeaderuit.

  3. Klik met de rechtermuisknop op Triggersen selecteer Nieuwe trigger.

  4. Klik in het menu Query op Waarden opgeven voor sjabloonparameters. U kunt ook op (Ctrl-Shift-M) drukken om het dialoogvenster Waarden opgeven voor sjabloonparameters te openen.

  5. Voer in het dialoogvenster Waarden opgeven voor sjabloonparameters de volgende waarden in voor de weergegeven parameters.

    Parameter Waarde
    Auteur uw naam
    Datum maken datum van vandaag
    Beschrijving Controleert de rating van de leverancier voordat een nieuwe inkooporder met de leverancier kan worden ingevoegd.
    Schema_Name Aankoop
    Trigger_Naam NewPODetail2
    Tabel_Naam Inkooporderdetail
    Gegevenswijzigingsverklaring Verwijder UPDATE en DELETE uit de lijst.
  6. Klik op OK-.

  7. Vervang in de Query-editorde opmerking -- Insert statements for trigger here door de volgende instructie:

    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. Als u wilt controleren of de syntaxis geldig is, klikt u in het menu Query op Parseren. Als er een foutbericht wordt geretourneerd, vergelijkt u de instructie met de bovenstaande informatie en corrigeert u deze indien nodig en herhaalt u deze stap.

  9. Als u de DML-trigger wilt maken, klikt u in het menu Query op uitvoeren. De DML-trigger wordt gemaakt als een object in de database.

  10. Als u de DML-trigger in de Objectexplorer wilt zien, klikt u met de rechtermuisknop op Triggers en selecteert u Vernieuwen.

voordat u begint met

Transact-SQL gebruiken

  1. Maak in Objectverkennerverbinding met een exemplaar van database-engine en vouw vervolgens dat exemplaar uit.

  2. Klik in het menu Bestand op Nieuwe Query.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en klik op uitvoeren. In dit voorbeeld wordt dezelfde opgeslagen DML-trigger gemaakt als hierboven.

    -- Trigger valid for multirow and single row inserts  
    -- and optimal for single row inserts.  
    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;