Zadání prvních a posledních aktivačních událostí
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance
Můžete určit, že jeden z triggerů AFTER přidružených k tabulce je buď první trigger AFTER, nebo poslední trigger AFTER, který se spustí pro každou aktivační akci INSERT, DELETE a UPDATE. Triggery AFTER, které se aktivují mezi prvním a posledním triggerem, se spustí v nedefinovaném pořadí.
Chcete-li určit pořadí pro AFTER trigger, použijte uloženou proceduru sp_settriggerorder. sp_settriggerorder má následující možnosti.
Možnost | Popis |
---|---|
První | Určuje, že spouštěč DML je prvním spouštěčem typu AFTER, který se spustí pro danou aktivační akci. |
poslední | Určuje, že DML trigger je posledním aktivovaným AFTER triggerem pro aktivační akci. |
Žádné | Určuje, že neexistuje žádné konkrétní pořadí, ve kterém se má aktivovat trigger DML. Používá se hlavně k resetování spouštěče, aby nebyl ani první, ani poslední. |
Následující příklad ukazuje použití sp_settriggerorder:
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Důležitý
První a poslední triggery musí být dva různé triggery DML.
Tabulka může mít současně definované triggery INSERT, UPDATE a DELETE. Každý typ příkazu může mít vlastní první a poslední aktivační události, ale nemůže se jednat o stejné aktivační události.
Pokud první nebo poslední aktivační událost definovaná pro tabulku nepokrývá aktivační akci, jako je například nezakrývání akce PRO AKTUALIZACI, FOR DELETE nebo FOR INSERT, neexistuje první nebo poslední aktivační událost pro chybějící akce.
INSTEAD OF spouštěče nelze specifikovat jako první nebo poslední spouštěče. Místo triggerů se aktivují před provedením aktualizací v podkladových tabulkách. Pokud se aktualizace provádějí triggerem INSTEAD OF pro podkladové tabulky, aktualizace se spustí před aktivací AFTER triggerů definovaných v tabulce. Pokud například trigger MÍSTO VLOŽENÍ v zobrazení vloží data do základní tabulky a samotná základní tabulka obsahuje trigger MÍSTO VLOŽENÍ a tři triggery PO VLOŽENÍ, aktivuje se trigger MÍSTO VLOŽENÍ v základní tabulce místo akce vložení, a triggery PO VLOŽENÍ v základní tabulce se aktivují po jakékoli akci vložení do základní tabulky. Další informace najdete v tématu DML triggery.
Pokud příkaz ALTER TRIGGER změní "první" nebo "poslední" spoušť, atribut First nebo Last je odstraněn a pořadí je nastaveno na hodnotu None. Pořadí se musí resetovat pomocí sp_settriggerorder.
Funkce OBJECTPROPERTY hlásí, zda trigger je první nebo poslední aktivační událost pomocí následujících vlastností: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggera ExecIsLastDeleteTrigger.
Replikace automaticky vygeneruje první trigger pro jakoukoli tabulku, která je součástí odběru s okamžitou nebo frontovou aktualizací. Replikace vyžaduje, aby jeho aktivační událost byla první aktivační událostí. Replikace vyvolá chybu při pokusu o zahrnutí tabulky s prvním triggerem v okamžité aktualizaci nebo ve frontě aktualizačních úloh. Pokud se pokusíte aktivovat první trigger po zahrnutí tabulky do předplatného, sp_settriggerorder vrátí chybu. Pokud použijete ALTER na trigger replikace nebo použijete sp_settriggerorder ke změně triggeru replikace na poslední nebo žádný, předplatné nebude fungovat správně.
Viz také
OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL)