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
Specifikuje AFTER spouště, které se spustí jako první nebo poslední. Spouštěče AFTER , které se spustí mezi prvním a posledním spouštěčem, se provádějí v nedefinovaném pořadí.
Syntaxe
sp_settriggerorder
[ @triggername = ] N'triggername'
, [ @order = ] 'order'
, [ @stmttype = ] 'stmttype'
[ , [ @namespace = ] 'DATABASE' | 'SERVER' | NULL ]
[ ; ]
Arguments
[ @triggername = ] N'triggername'
Název spouštěče a schéma, ke kterému patří, pokud je to relevantní, jehož pořadí má být nastaveno nebo změněno.
@triggername je nvarchar(517), bez výchozího nastavení, a je ve formátu [ trigger_schema . ] trigger_name. Pokud název neodpovídá spouštěči nebo pokud název odpovídá INSTEAD OF spouštěči, procedura vrátí chybu. Schéma nelze specifikovat pro DDL nebo spouštěče přihlášení.
[ @order = ] 'pořádek'
Nastavení pro nové pořadí spouště. @order je varchar(10) a může mít libovolnou z následujících hodnot.
| Hodnota | Description |
|---|---|
First |
Spoušť se spustí jako první. |
Last |
Spoušť se spustí jako poslední. |
None |
Spoušť se střílí v nedefinovaném pořadí. |
Důležité
Spouštěče First a Last musí být dva různé spouštěče.
[ @stmttype = ] 'stmttype'
Specifikuje Transact-SQL příkaz, který spustí spoušť.
@stmttype je varchar(50) a může být INSERT, UPDATE, DELETE, LOGON, nebo jakákoli událost T-SQL příkazu uvedená v DDL Events. Skupiny událostí nelze specifikovat.
Spouštěč může být určen jako First spouštěč nebo Last pro typ příkazu až poté, co je tento spouštěč definován jako spouštěč pro daný typ příkazu. Například spouštěč TR1 může být určen First pro INSERT on table T1 , pokud TR1 je definován jako INSERT spouštěč. Databázový engine vrací chybu, pokud TR1, která byla definována pouze jako spouštěčINSERT, je nastavena jako First spouštěč Last nebo UPDATE pro příkaz. Další informace najdete v části Poznámky.
@namespace = { 'DATABÁZE' | 'SERVER' | NULL }
Když je @triggername DDL spouštěč, @namespace specifikuje, zda byl @triggername vytvořen v databázovém nebo serverovém rozsahu. Pokud @triggername spouštěč přihlášení, musí být specifikován. SERVER Pro více informací o DDL spouštěčním zaměřovači viz DDL Triggers. Pokud není specifikováno, nebo pokud NULL ano, @triggername je DML spouštěč.
Hodnoty návratového kódu
0 (úspěch) a 1 (neúspěch).
Poznámky
Tato sekce se zabývá úvahami ohledně spouštěčů jazyka pro manipulaci s daty (DML) a jazyka pro definici dat (DDL).
DML triggery
Na jedné tabulce může být pro každý příkaz pouze jeden First a jeden Last spouštěč.
Pokud First je spouštěč již definován v tabulce, databázi nebo serveru, nemůžete nový spouštěč označit pro First stejnou tabulku, databázi nebo server pro stejný @stmttype. Toto omezení platí Last i pro spouštěče.
Replikace automaticky generuje první spouštěč pro jakoukoli tabulku, která je zahrnuta v okamžitém aktualizačním nebo frontovém aktualizačním odběru. Replikace vyžaduje, aby její spouštěč byl první. Replikace vyvolává chybu, když se pokusíte zahrnout tabulku s prvním triggerem do předplatného pro okamžité aktualizace nebo ve frontě aktualizace. Pokud se pokusíte nastavit spouštěč jako první spouštěč poté, co je tabulka zahrnuta do předplatného, sp_settriggerorder vrátí se chyba. Pokud použijete ALTER TRIGGER na spouštěči replikace, nebo ji sp_settriggerorder změníte na Last spouštěč nebo None spouštěč, předplatné nefunguje správně.
Spouště DDL
Pokud na stejné události existují DDL trigger s databázovým rozsahem a DDL trigger se serverovým rozsahem, můžete nastavit, že oba triggery budou First trigger nebo trigger.Last Spouštěče s omezením serveru však vždy spustí jako první. Obecně je pořadí provádění DDL spouštěčů, které existují na stejné události, následující:
- Spouštěč na úrovni serveru označený
First - Další spouštěče na úrovni serveru
- Spouštěč na úrovni serveru označený
Last - Spouštěč na úrovni databáze označený
First - Další spouštěče na úrovni databáze
- Spouštěč na úrovni databáze označený
Last
Obecné aspekty aktivačních událostí
Pokud ALTER TRIGGER příkaz změní první nebo poslední spouštěč, atribut First or Last původně nastavený na spouštěč je vynechán a hodnota je nahrazena .None Hodnota pořadí musí být resetována pomocí .sp_settriggerorder
Pokud musí být stejný spouštěč určen jako první nebo poslední příkaz pro více než jeden typ příkazu, sp_settriggerorder musí být vykonán pro každý typ příkazu. Také musí být spouštěč nejprve definován pro typ příkazu, než může být určen jako First spouštěč nebo Last pro tento typ příkazu.
Povolení
Nastavení pořadí DDL triggeru s rozsahem serveru (vytvořeným ON ALL SERVER) nebo přihlášením vyžaduje CONTROL SERVER oprávnění.
Nastavení pořadí DDL spouštěče s databázovým rozsahem (vytvořeným ON DATABASE) vyžaduje ALTER ANY DATABASE DDL TRIGGER oprávnění.
Nastavení pořadí DML spouštěče vyžaduje ALTER povolení k tabulce nebo zobrazení, ve kterém je spouštěč definován.
Examples
A. Nastavte pořadí střelby pro DML spoušť
Následující příklad specifikuje, že spouštěč uSalesOrderHeader je první spouštěč, který se spustí po provedení UPDATE operace na stole Sales.SalesOrderHeader .
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'Sales.uSalesOrderHeader',
@order = 'First',
@stmttype = 'UPDATE';
B. Nastavte pořadí střelby pro spoušť DDL
Následující příklad specifikuje, že trigger ddlDatabaseTriggerLog je první trigger, který se spustí poté, co v databázi ALTER_TABLE nastane událost.AdventureWorks2025
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'ddlDatabaseTriggerLog',
@order = 'First',
@stmttype = 'ALTER_TABLE',
@namespace = 'DATABASE';
Související obsah
- uložené procedury systému (Transact-SQL)
- uložené procedury databázového stroje (Transact-SQL)
- ALTEROVÁ SPOUŠŤ (Transact-SQL)