Freigeben über


Erstellen von DML-Triggern

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

In diesem Artikel wird beschrieben, wie Sie einen Transact-SQL Data Manipulation Language (DML)-Trigger mit SQL Server Management Studio oder der Transact-SQL-Anweisung CREATE TRIGGER erstellen.

Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.

Einschränkungen

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

Berechtigungen

Erfordert ALTER die Berechtigung für die Tabelle oder Ansicht, für die der Trigger erstellt wird.

Erstellen eines DML-Triggers

Wählen Sie eine der folgenden Methoden:

Verwenden 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 AdventureWorks2025 Datenbank, erweitern Sie 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. Wählen Sie im Menü "Abfrage " die Option "Werte für Vorlagenparameter angeben" aus. 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
    Erstellungsdatum Heutiges Datum
    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 Entfernen UPDATE und DELETE aus der Liste.
  6. Wählen Sie OK aus.

  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. Um zu überprüfen, ob die Syntax gültig ist, wählen Sie im Menü "Abfrage " die Option "Analysieren" aus. Wenn eine Fehlermeldung zurückgegeben wird, vergleichen Sie die Anweisung mit dem vorherigen Codeblock, korrigieren Sie nach Bedarf, und wiederholen Sie diesen Schritt.

  9. Um den DML-Trigger zu erstellen, wählen Sie im Menü "Abfrage " die Option "Ausführen" aus. 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.

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. Wählen Sie im Menü "Datei " die Option "Neue Abfrage" aus.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. In diesem Beispiel wird derselbe gespeicherte DML-Trigger wie zuvor erstellt. Der Auslöser ist gültig für Mehrfach- und Einfügezeilen und optimal für Einfügezeilen.

    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;