Skapa DML-triggers

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Den här artikeln beskriver hur man skapar en Transact-SQL Data Manipulation Language (DML)-trigger med SQL Server Management Studio, eller Transact-SQL-satsen CREATE TRIGGER .

Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.

Begränsningar

För en lista över begränsningar och restriktioner relaterade till att skapa DML-triggers, se CREATE TRIGGER.

Behörigheter

Kräver ALTER behörighet på tabellen eller vyn där triggern skapas.

Hur man skapar en DML-trigger

Du kan använda en av följande metoder:

Använda SQL Server Management Studio

  1. I Object Exploreransluter du till en instans av databasmotorn och expanderar sedan den instansen.

  2. Expandera databaser, expandera databasenAdventureWorks2025, expandera tabeller och sedan expandera tabellenPurchasing.PurchaseOrderHeader.

  3. Högerklicka på Utlösareoch välj sedan Ny utlösare.

  4. På menyn Query väljer du Ange värden för mallparametrar. Du kan också trycka på (Ctrl-Shift-M) för att öppna dialogrutan Ange värden för mallparametrar.

  5. I dialogrutan Ange värden för mallparametrar anger du följande värden för de parametrar som visas.

    Parameter Värde
    Författare Ditt namn
    Skapa datum dagens datum
    Beskrivning Kontrollerar leverantörens kreditvärdighet innan du tillåter att en ny inköpsorder med leverantören infogas.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Ta bort UPDATE och DELETE från listan.
  6. Välj OK.

  7. I Frågeredigerarenersätter du kommentaren -- Insert statements for trigger here med följande instruktion:

    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. För att verifiera att syntaxen är giltig, välj Parsei frågemenyn. Om ett felmeddelande returneras, jämför satsen med föregående kodblock, korrigera vid behov och upprepa detta steg.

  9. För att skapa DML-triggern, välj Kör frånFrågemenyn. DML-utlösaren skapas som ett objekt i databasen.

  10. Om du vill se DML-utlösaren i Object Explorer högerklickar du på Utlösare och väljer Uppdatera.

Använd Transact-SQL

  1. I Object Exploreransluter du till en instans av databasmotorn och expanderar sedan den instansen.

  2. Från Filmenyn , välj Ny fråga.

  3. Kopiera och klistra in följande exempel i frågefönstret och välj Kör. Detta exempel skapar samma lagrade DML-trigger som tidigare. Triggern gäller för flerrads- och enkelradsinsättningar, och är optimal för enkelradsinsättningar.

    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;