Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Tento článek popisuje, jak vytvořit trigger DML (Transact-SQL Data Manipulation Language) pomocí aplikace SQL Server Management Studio nebo příkaz Transact-SQL CREATE TRIGGER .
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
Omezení
Seznam omezení a omezení souvisejících s vytvářením triggerů DML najdete v tématu CREATE TRIGGER.
Dovolení
Vyžaduje ALTER oprávnění k tabulce nebo zobrazení, na kterém se trigger vytváří.
Vytvoření triggeru DML
Můžete použít jednu z následujících metod:
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 položku Databáze, rozbalte
AdventureWorks2025databázi, rozbalte položku Tabulky a potom rozbalte tabulkuPurchasing.PurchaseOrderHeader.Klepněte pravým tlačítkem myši na Triggerya pak vyberte Nový trigger.
V nabídce dotazu vyberte 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 autora vaše jméno Vytvořit datum dnešní datum Description Zkontroluje rating dodavatele před povolením vložení nové nákupní objednávky s dodavatelem. Schema_Name PurchasingTrigger_Name NewPODetail2Table_Name PurchaseOrderDetailData_Modification_Statement Odeberte UPDATEaDELETEze seznamu.Vyberte OK.
V editoru dotazů nahraďte komentář
-- Insert statements for trigger herená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, vyberte v nabídce Dotaz možnost Parsovat. Pokud se vrátí chybová zpráva, porovnejte příkaz s předchozím blokem kódu, opravte ho podle potřeby a opakujte tento krok.
Pokud chcete vytvořit trigger DML, v nabídce Dotaz vyberte 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žijte Transact-SQL
V Průzkumníku objektůse připojte k instanci Databázového stroje a poté tuto instanci rozbalte.
V nabídce Soubor vyberte Nový dotaz.
Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit. Tento příklad vytvoří stejnou uloženou aktivační událost DML jako předtím. Aktivační událost je platná pro vložení více řádků a jeden řádek a je optimální pro vložení s jedním řádkem.
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;