DML-triggers maken
van toepassing op:SQL Server
Azure SQL Database
Azure 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
Maak in Objectverkennerverbinding met een exemplaar van Database Engine en breid dat exemplaar vervolgens uit.
Vouw databasesuit, vouw de
AdventureWorks2022
database uit, vouw tabellen uit en vouw vervolgens de tabel Purchase.PurchaseOrderHeaderuit.Klik met de rechtermuisknop op Triggersen selecteer Nieuwe trigger.
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.
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. Klik op OK-.
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;
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.
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.
Als u de DML-trigger in de Objectexplorer wilt zien, klikt u met de rechtermuisknop op Triggers en selecteert u Vernieuwen.
Transact-SQL gebruiken
Maak in Objectverkennerverbinding met een exemplaar van database-engine en vouw vervolgens dat exemplaar uit.
Klik in het menu Bestand op Nieuwe Query.
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;