Sdílet prostřednictvím


Vytváření triggerů DML

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Toto téma popisuje, jak vytvořit trigger DML Transact-SQL pomocí aplikace SQL Server Management Studio a pomocí příkazu Transact-SQL CREATE TRIGGER.

Než začnete

Omezení a omezenosti

Seznam omezení a omezení souvisejících s vytvářením triggerů DML najdete v tématu CREATE TRIGGER (Transact-SQL).

Dovolení

Vyžaduje oprávnění ALTER v tabulce nebo zobrazení, na kterém se aktivační událost vytváří.

Vytvoření triggeru DML

Můžete použít jednu z těchto možností:

Použití aplikace SQL Server Management Studio

  1. V Průzkumníku objektůse připojte k instanci Databázového stroje a poté tuto instanci rozbalte.

  2. Rozbalte Databáze, rozbalte databázi AdventureWorks2022, rozbalte Tabulky a potom rozbalte tabulku Purchasing.PurchaseOrderHeader.

  3. Klepněte pravým tlačítkem myši na Triggerya pak vyberte Nový trigger.

  4. V nabídce dotazu klepněte na Zadat hodnoty pro parametry šablony . Můžete také stisknout (Ctrl-Shift-M) a otevřít dialogové okno Zadat hodnoty pro parametry šablony.

  5. V dialogovém okně Zadat hodnoty parametrů šablony zadejte následující hodnoty pro zobrazené parametry.

    Parametr Hodnota
    Autor vaše jméno
    Vytvořit datum dnešní datum
    Popis Zkontroluje rating dodavatele před povolením vložení nové nákupní objednávky s dodavatelem.
    Schema_Name Nákup
    Trigger_Name NewPODetail2
    Název_Tabulky DetailObjednávky
    Prohlášení_o_změně_dat Odeberte ze seznamu možnost UPDATE a DELETE.
  6. Klepněte na tlačítko OK.

  7. V editoru dotazů nahraďte komentář -- Insert statements for trigger here následujícím příkazem:

    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. Pokud chcete ověřit platnost syntaxe, klikněte na Analyzovatv nabídce dotazu . Pokud se vrátí chybová zpráva, porovnejte příkaz s výše uvedenými informacemi a podle potřeby opravte a opakujte tento krok.

  9. Chcete-li vytvořit trigger DML, v nabídce Dotaz klepněte na tlačítko Spustit. Trigger DML se vytvoří jako objekt v databázi.

  10. Pokud chcete zobrazit trigger DML uvedený v Průzkumníku objektů, klikněte pravým tlačítkem na Triggery a vyberte Aktualizovat.

Před zahájením

Použití Transact-SQL

  1. V Průzkumníku objektůse připojte k instanci databáze a poté tuto instanci rozbalte.

  2. V nabídce Soubor klikněte na Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a klikněte na Spustit. Tento příklad vytvoří stejnou uloženou aktivační událost DML jako výše.

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