Erstellen von DML-Triggern
In diesem Thema wird beschrieben, wie ein Transact-SQL-DML-Trigger mit SQL Server Management Studio unter Verwendung der Transact-SQL- CREATE TRIGGER-Anweisung erstellt wird.
Vorbereitungen
Einschränkungen
Eine Liste der Einschränkungen und für die Erstellung von DML-Triggern finden Sie unter CREATE TRIGGER (Transact-SQL).
Berechtigungen
Es ist die ALTER-Berechtigung für die Tabelle oder Sicht erforderlich, für die der Trigger erstellt wird.
So erstellen Sie einen DML-Trigger
Sie können eine der folgenden Anwendungen verwenden:
SQL Server Management Studio
Transact-SQL
Verwenden von SQL Server Management Studio
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von Database Engine (Datenbankmodul) her, und erweitern Sie dann diese Instanz.
Erweitern Sie Datenbanken, die AdventureWorks2012 -Datenbank und Tabellen, und erweitern Sie dann die Tabelle Purchasing.PurchaseOrderHeader.
Klicken Sie mit der rechten Maustaste auf Trigger, und wählen Sie Neuer Trigger aus.
Klicken Sie im Menü Abfrage auf Werte für Vorlagenparameter angeben. Alternativ können Sie die Tastenkombination STRG+UMSCHALT+M drücken, um das Dialogfeld Werte für Vorlagenparameter angeben zu öffnen.
Geben Sie im Dialogfeld Werte für Vorlagenparameter angeben die folgenden Werte für die angezeigten Parameter ein.
Parameter
Wert
Autor
Your name
Erstellt am
Today's date
Beschreibung
Überprüft die Anbieterbonität, bevor eine neue Bestellung mit dem einzufügenden Anbieter zugelassen wird.
Schema_Name
Purchasing
Trigger_Name
NewPODetail2
Table_Name
PurchaseOrderDetail
Data_Modification_Statement
UPDATE und DELETE aus der Liste entfernen.
Klicken Sie auf OK.
Ersetzen Sie im Abfrage-Editor den Kommentar -- Insert statements for trigger here durch die folgende Anweisung:
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;
Zum Überprüfen der Syntax klicken Sie im Menü Abfrage auf Analysieren. Wenn eine Fehlermeldung zurückgegeben wird, vergleichen Sie die Anweisung mit den Informationen oben, korrigieren diese gegebenenfalls und wiederholen diesen Schritt.
Zum Erstellen des DML-Triggers klicken Sie im Menü Abfrage auf Ausführen. Der DML-Trigger wird als Objekt in der Datenbank erstellt.
Zum Anzeigen des DML-Triggers im Objekt-Explorer klicken Sie mit der rechten Maustaste auf Trigger und wählen Aktualisieren aus.
[Nach oben]
Verwenden von Transact-SQL
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von Database Engine (Datenbankmodul) her, und erweitern Sie dann diese Instanz.
Klicken Sie im Menü Datei auf Neue Abfrage.
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. In diesem Beispiel wird derselbe gespeicherte DML-Trigger wie oben erstellt.
-- 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;
[Nach oben]