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
Trigger DML je speciální typ uložené procedury, která se automaticky projeví, když dojde k události jazyka pro manipulaci s daty (DML), která ovlivňuje tabulku nebo zobrazení definované v triggeru. Události DML zahrnují INSERT, UPDATEnebo DELETE příkazy. Triggery DML je možné použít k vynucení obchodních pravidel a integrity dat, dotazování jiných tabulek a zahrnutí složitých příkazů Transact-SQL. Spouštěč a příkaz jsou považovány za jednu transakci, kterou lze vrátit zpět ze spouštěče. Pokud se zjistí závažná chyba (například nedostatek místa na disku), celá transakce se automaticky vrátí zpět.
Výhody
Triggery DML se podobají omezením v tom, že mohou vynutit integritu entity nebo integritu domény. Obecně platí, že integrita entit by se měla vždy vynucovat na nejnižší úrovni indexy, které jsou součástí omezení PRIMARY KEY nebo jsou vytvořeny nezávisle na omezeních UNIQUE. Integrita domény by se měla vynucovat prostřednictvím CHECK omezení a referenční integrita (RI) by se měla vynucovat prostřednictvím FOREIGN KEY omezení. Triggery DML jsou nejužitečnější, když funkce podporované omezeními nemůžou splňovat funkční potřeby aplikace.
Následující seznam porovnává triggery DML s omezeními a identifikuje, kdy triggery DML mají výhody oproti omezením.
Triggery DML mohou kaskádovat změny prostřednictvím souvisejících tabulek v databázi; Tyto změny lze však provést efektivněji pomocí kaskádových omezení referenční integrity.
FOREIGN KEYOmezení mohou ověřit hodnotu sloupce pouze s přesnou shodou s hodnotou v jiném sloupci, pokudREFERENCESklauzule nedefinuje kaskádovou referenční akci.Mohou chránit před škodlivými nebo nesprávnými
INSERT,UPDATE, aDELETEoperacemi a vynucovat další omezení, která jsou složitější než omezení definovaná sCHECK.Na rozdíl od
CHECKomezení můžou triggery DML odkazovat na sloupce v jiných tabulkách. Trigger může například použít jinouSELECTtabulku k porovnání s vloženým nebo aktualizovaným datem a k provádění dalších akcí, jako je úprava dat nebo zobrazení uživatelem definované chybové zprávy.Mohou vyhodnotit stav tabulky před a po úpravě dat a provádět akce na základě tohoto rozdílu.
Několik triggerů DML stejného typu (
INSERT,UPDATEneboDELETE) v tabulce umožňuje provádět více různých akcí v reakci na stejný příkaz úpravy.Omezení mohou komunikovat o chybách pouze prostřednictvím standardizovaných systémových chybových zpráv. Pokud vaše aplikace vyžaduje nebo může těžit z přizpůsobených zpráv a složitějšího zpracování chyb, musíte použít trigger.
Triggery DML můžou zakázat nebo vrátit zpět změny, které porušují referenční integritu, a tím zrušit pokus o úpravu dat. Taková aktivační událost se může projevit, když změníte cizí klíč a nová hodnota neodpovídá jeho primárnímu klíči.
FOREIGN KEYK tomuto účelu se ale obvykle používají omezení.Pokud v tabulce triggerů existují omezení, zkontrolují se po spuštění triggeru
INSTEAD OF, ale před spuštěním triggeruAFTER. Pokud dojde k porušení omezení, akce triggeruINSTEAD OFse vrátí zpět aAFTERtrigger se nespustí.
Typy triggeru DML
Trigger AFTER
AFTER spouštěče se spustí po provedení akce INSERT, UPDATE, MERGE nebo DELETE příkazu.
AFTER triggery se nikdy nespustí, pokud dojde k narušení omezení. Proto se tyto triggery nedají použít pro žádné zpracování, které by mohlo bránit porušení omezení. Pro každou akci INSERT, UPDATE nebo DELETE uvedenou v příkazu MERGE se aktivuje odpovídající aktivační událost pro každou operaci DML.
Místo triggeru
INSTEAD OF triggery přepíší standardní akce aktivačního příkazu. Proto je možné je použít k provádění kontroly chyb nebo hodnot u jednoho nebo více sloupců a provádění dalších akcí před vložením, aktualizací nebo odstraněním řádku nebo řádků. Pokud například hodnota, která se aktualizuje v hodinovém sloupci mzdy v tabulce mzdy, překročí zadanou hodnotu, může být aktivační událost definována tak, aby buď vyvolala chybovou zprávu, a vrátila transakci zpět, nebo vložte nový záznam do záznamu auditu před vložením záznamu do tabulky mzdy. Hlavní výhodou triggerů INSTEAD OF je, že umožňují zobrazení, která by nebyla aktualizovatelná pro podporu aktualizací. Například zobrazení založené na několika základních tabulkách musí použít INSTEAD OF trigger pro podporu vložení, aktualizací a odstranění odkazovacích dat ve více než jedné tabulce. Další výhodou triggerů INSTEAD OF je, že umožňují vytvářet logiku, která může odmítnout části dávky, zatímco umožňuje úspěch jiných částí.
Tato tabulka porovnává funkčnost AFTER triggerů a INSTEAD OF triggerů.
| Funkce |
AFTER spouštěč |
INSTEAD OF spouštěč |
|---|---|---|
| Použitelnost | Tabulky | Tabulky a zobrazení |
| Množství pro tabulku nebo zobrazení | Více pro každou aktivační akci (UPDATE, DELETE, a INSERT) |
Jedna na aktivační akci (UPDATE, DELETEa INSERT) |
| Kaskádové odkazy | Neplatí žádná omezení. |
INSTEAD OF UPDATE a DELETE triggery nejsou povoleny u tabulek, které jsou cílem kaskádových omezení referenční integrity. |
| Provádění | Po: Zpracování omezení Deklarativní referenční akce inserted a deleted vytváření tabulekAktivační akce |
Před: Zpracování omezení Namísto: Aktivační akce Po vytvoření tabulek inserted a deleted |
| Pořadí provádění | První a poslední spuštění mohou být zadána. | Není relevantní |
varchar(max), nvarchar(max) a varbinary(max) odkazy na sloupce v inserted tabulkách a deleted tabulkách |
Povoleno | Povoleno |
odkazy na sloupce textu, ntextu a obrázku v tabulkách inserted a deleted |
Nepovoleno | Povoleno |
CLR trigger
Aktivační událost modulu CLR (Common Language Runtime) může být buď aktivační událost, AFTER nebo INSTEAD OF aktivační událost. Trigger CLR může být také spouštěčem DDL (Language definice dat). Místo spuštění Transact-SQL uložené procedury trigger CLR spustí jednu nebo více metod napsaných ve spravovaném kódu, které jsou členy sestavení vytvořeného v rozhraní .NET Framework a nahrané na SQL Serveru.
Související úkoly
| Úkol | Článek |
|---|---|
| Popisuje, jak vytvořit trigger DML. | Vytváření triggerů DML |
| Popisuje, jak vytvořit trigger CLR. | Vytváření triggerů CLR |
| Popisuje, jak vytvořit trigger DML pro zpracování úprav dat s jedním řádkem i více řádky. | Vytvoření triggerů DML pro zpracování více řádků dat |
| Popisuje, jak vnořit spouštěče. | Vytváření vnořených triggerů |
Popisuje, jak určit pořadí, ve kterém se AFTER triggery aktivují. |
Zadání prvních a posledních aktivačních událostí |
| Popisuje, jak používat speciální tabulky pro vložení a odstranění v kódu pro triggery. | Použití vložených a odstraněných tabulek |
| Popisuje, jak upravit nebo přejmenovat trigger DML. | Úprava nebo přejmenování triggerů DML |
| Popisuje, jak zobrazit informace o triggerech DML. | Získejte informace o triggerech DML |
| Popisuje, jak odstranit nebo zakázat triggery DML. | Odstranění nebo zakázání triggerů DML |
| Popisuje, jak spravovat zabezpečení triggerů. | Správa zabezpečení triggerů |
Související obsah
- VYTVOŘIT SPOUŠŤ (Transact-SQL)
- ALTER TRIGGER (Transact-SQL)
- ODSTRANIT TRIGGER (Transact-SQL)
- ZAKÁZAT TRIGGER (Transact-SQL)
- Funkce triggeru (Transact-SQL)