Vytváření triggerů DML
platí pro:SQL Server
Azure SQL Database
azure 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
V Průzkumníku objektůse připojte k instanci Databázového stroje a poté tuto instanci rozbalte.
Rozbalte Databáze, rozbalte databázi
AdventureWorks2022
, rozbalte Tabulky a potom rozbalte tabulku Purchasing.PurchaseOrderHeader.Klepněte pravým tlačítkem myši na Triggerya pak vyberte Nový trigger.
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.
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. Klepněte na tlačítko OK.
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;
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.
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.
Pokud chcete zobrazit trigger DML uvedený v Průzkumníku objektů, klikněte pravým tlačítkem na Triggery a vyberte Aktualizovat.
Použití Transact-SQL
V Průzkumníku objektůse připojte k instanci databáze a poté tuto instanci rozbalte.
V nabídce Soubor klikněte na Nový dotaz.
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;