Dela via


Skapa DML-utlösare

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Det här avsnittet beskriver hur du skapar en Transact-SQL DML-utlösare med hjälp av SQL Server Management Studio och med hjälp av instruktionen Transact-SQL CREATE TRIGGER.

Innan du börjar

Begränsningar och restriktioner

En lista över begränsningar och begränsningar som rör skapande av DML-utlösare finns i CREATE TRIGGER (Transact-SQL).

Behörigheter

Kräver ALTER-behörighet i tabellen eller vyn där utlösaren skapas.

Skapa en DML-utlösare

Du kan använda något av följande:

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 databasen AdventureWorks2022, expandera Tabeller och expandera sedan tabellen Purchasing.PurchaseOrderHeader.

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

  4. På menyn Query klickar du på 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 Inköp
    Trigger_Name NewPODetail2
    Tabell_Namn inköpsorderdetalj
    Datamodifikationsuttalande Ta bort UPDATE och DELETE från listan.
  6. Klicka på 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. Kontrollera att syntaxen är giltig genom att klicka på Parsapå menyn Query . Om ett felmeddelande returneras, jämför du instruktionen med informationen ovan, korrigerar vid behov och upprepar sedan steget.

  9. Om du vill skapa DML-utlösaren klickar du på Körpå menyn Query . 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.

innan du börjar

Använda Transact-SQL

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

  2. På menyn Arkiv klickar du på Ny fråga.

  3. Kopiera och klistra in följande exempel i frågefönstret och klicka på Kör. I det här exemplet skapas samma lagrade DML-utlösare som ovan.

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