Freigeben über


Erstellen von DML-Triggern

In diesem Thema wird das Erstellen eines Transact-SQL DML-Triggers mithilfe von SQL Server Management Studio und mithilfe der Transact-SQL CREATE TRIGGER-Anweisung beschrieben.

Bevor Sie beginnen

Einschränkungen und Beschränkungen

Eine Liste der Einschränkungen und Einschränkungen im Zusammenhang mit dem Erstellen von DML-Triggern finden Sie unter CREATE TRIGGER (Transact-SQL).

Erlaubnisse

Erfordert ALTER-Berechtigung für die Tabelle oder Ansicht, 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, erweitern Sie die AdventureWorks2012-Datenbank , erweitern Sie Tabellen , und erweitern Sie dann die Tabelle Purchase.PurchaseOrderHeader.

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

  4. Klicken Sie im Menü Abfrage auf Werte für Vorlagenparameter angeben. Alternativ können Sie (STRG-Shift-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
    Verfasser Ihr Name
    Erstellungsdatum Das heutige Datum
    BESCHREIBUNG Überprüft die Kreditwürdigkeit des Anbieters, bevor eine neue Bestellung mit dem Lieferanten eingefügt werden kann.
    Schema_Name Einkauf
    Trigger_Name NewPODetail2
    Table_Name Bestellungsdetail
    Datenänderungserklärung Entfernen Sie UPDATE und DELETE aus der Liste.
  6. Klicke auf OK.

  7. 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;  
    
  8. Um zu überprüfen, ob die Syntax gültig ist, klicken Sie im Menü "Abfrage " auf "Analysieren". Wenn eine Fehlermeldung zurückgegeben wird, vergleichen Sie die Anweisung mit den obigen Informationen, und korrigieren Sie sie nach Bedarf, und wiederholen Sie diesen Schritt.

  9. Um den DML-Trigger zu erstellen, klicken Sie im Menü "Abfrage" auf "Ausführen". Der DML-Trigger wird als Objekt in der Datenbank erstellt.

  10. Um den im Objekt-Explorer aufgeführten DML-Trigger anzuzeigen, klicken Sie mit der rechten Maustaste auf Trigger, und wählen Sie "Aktualisieren" aus.

Bevor Sie beginnen

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