Freigeben über


Erstellen von DML-Triggern

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

In diesem Thema wird beschrieben, wie Sie mit SQL Server Management Studio und der Transact-SQL-Anweisung CREATE TRIGGER einen Transact-SQL DML-Trigger erstellen.

Vorbereitungen

Einschränkungen

Eine Liste der Einschränkungen in Zusammenhang mit der 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:

Verwendung von SQL Server Management Studio

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, die AdventureWorks2022 -Datenbank und Tabellen , und erweitern Sie dann die Tabelle Purchasing.PurchaseOrderHeader.

  3. Klicken Sie mit der rechten Maustaste auf Trigger, und wählen Sie Neuer Triggeraus.

  4. 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.

  5. Geben Sie im Dialogfeld Werte für Vorlagenparameter angeben die folgenden Werte für die angezeigten Parameter ein.

    Parameter Wert
    Autor Ihr Name
    Create Date Heutiges Datum
    Beschreibung Überprüft die Anbieterbonität, bevor eine neue Bestellung mit dem einzufügenden Anbieter zugelassen wird.
    Schema_Name Einkauf
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement UPDATE und DELETE aus der Liste entfernen.
  6. Klicken Sie auf OK.

  7. Ersetzen Sie im Abfrage-Editorden 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;  
    
  8. 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.

  9. Zum Erstellen des DML-Triggers klicken Sie im Menü Abfrage auf Ausführen. Der DML-Trigger wird als Objekt in der Datenbank erstellt.

  10. Zum Anzeigen des DML-Triggers im Objekt-Explorer klicken Sie mit der rechten Maustaste auf Trigger und wählen Aktualisierenaus.

Vorbereitungen

Verwenden von Transact-SQL

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Klicken Sie im Menü Datei auf Neue Abfrage.

  3. 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 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;