Delen via


DML-triggers maken

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

In dit artikel wordt beschreven hoe u een Transact-SQL DML-trigger (Data Manipulation Language) maakt met SQL Server Management Studio of de Transact-SQL-instructie CREATE TRIGGER .

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

Beperkingen

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

Machtigingen

Hiervoor is machtiging vereist ALTER voor de tabel of weergave waarop de trigger wordt gemaakt.

Een DML-trigger maken

U kunt een van de volgende methoden gebruiken:

SQL Server Management Studio gebruiken

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

  2. Vouw Databases uit, vouw de AdventureWorks2022 database uit, vouw Tabellen uit en vouw vervolgens de tabel Purchasing.PurchaseOrderHeaderuit.

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

  4. Selecteer in het menu QuerySpecificeer waarden 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
    maken 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 Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Verwijder UPDATE en DELETE uit de lijst.
  6. Kies 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. Selecteer Parseren in het menu Query om te controleren of de syntaxis geldig is. Als er een foutbericht wordt geretourneerd, vergelijkt u de instructie met het vorige codeblok, corrigeert u deze indien nodig en herhaalt u deze stap.

  9. Als u de DML-trigger wilt maken, selecteert u Uitvoeren in het menu Query. 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.

Gebruik Transact-SQL

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

  2. Selecteer Nieuwe query in het menu Bestand.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren. In dit voorbeeld wordt dezelfde opgeslagen DML-trigger gemaakt als voorheen. De trigger is geldig voor invoegingen met meerdere rijen en één rij en is optimaal voor invoegingen van één rij.

    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;