Sdílet prostřednictvím


DML triggery

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL 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 KEY Omezení mohou ověřit hodnotu sloupce pouze s přesnou shodou s hodnotou v jiném sloupci, pokud REFERENCES klauzule nedefinuje kaskádovou referenční akci.

  • Mohou chránit před škodlivými nebo nesprávnými INSERT, UPDATE, a DELETE operacemi a vynucovat další omezení, která jsou složitější než omezení definovaná s CHECK.

    Na rozdíl od CHECK omezení můžou triggery DML odkazovat na sloupce v jiných tabulkách. Trigger může například použít jinou SELECT tabulku 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, UPDATEnebo DELETE) 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 KEY K 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 triggeru AFTER . Pokud dojde k porušení omezení, akce triggeru INSTEAD OF se vrátí zpět a AFTER trigger 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í tabulek

Aktivač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.

Ú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ů