Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Megadja, hogy melyik AFTER ravasz először vagy utoljára lő a ravasz. Az AFTER első és utolsó ravasz között kilőtt ravaszok meghatározatlan sorrendben hajtják végre.
Transact-SQL szintaxis konvenciók
Szemantika
sp_settriggerorder
[ @triggername = ] N'triggername'
, [ @order = ] 'order'
, [ @stmttype = ] 'stmttype'
[ , [ @namespace = ] 'DATABASE' | 'SERVER' | NULL ]
[ ; ]
Arguments
[ @triggername = ] N'triggername'
A trigger neve és az a séma, amelyhez tartozik, ha alkalmazható, és amelynek sorrendjét be kell állítani vagy megváltoztatni.
@triggernamenvarchar(517), alapértelmezett nélkül, és a [ trigger_schema . ] formátumban van trigger_name. Ha a név nem egyezik egy triggernek, vagy ha a név egy INSTEAD OF triggernek felel meg, az eljárás hibát ad vissza. Nem lehet séma megadni DDL vagy bejelentkezési triggerekhez.
[ @order = ] 'rend'
A trigger új sorrendjének beállítása. @ordera varchar(10), és bármelyik következő érték lehet.
| Érték | Description |
|---|---|
First |
Először a ravaszt kell elindítani. |
Last |
A ravaszt utoljára lőtik el. |
None |
A ravasz meghatározott sorrendben kerül kilőni. |
Fontos
Az First és Last triggereknek két különböző triggernek kell lenniük.
[ @stmttype = ] 'stmttype'
Megadja a Transact-SQL utasítást, amely elindítja a ravaszt.
@stmttypea varchar(50), és lehet INSERT, UPDATE, DELETE, LOGON, , vagy bármely T-SQL utasítás esemény , amely a DDL Events-ben szerepel. Az eseménycsoportokat nem lehet meghatározni.
Egy trigger csak akkor lehet kijelölni vagy FirstLast triggerként egy állítástípushoz, miután az adott trigger már az adott állítástípus triggerjeként van meghatározva. Például a trigger TR1FirstINSERT kijelölhető táblánT1, ha TR1 triggerként van definiálva.INSERT Az adatbázis motor hibát ad vissza, ha TR1, amely csak triggerként INSERT definiálódott, vagy triggerként van beállítva FirstLast egy UPDATE utasításhoz. További információkért lásd a Megjegyzések szakaszt .
@namespace = { 'ADATBÁZIS' | 'SZERVER' | NULL }
Ha @triggername DDL trigger, @namespace meghatározza @triggername adatbázis vagy szerver hatókörrel hozták létre. Ha @triggername bejelentkezési trigger, SERVER meg kell határozni. További információért a DDL trigger scope-ról lásd: DDL triggerek. Ha nincs megadva, vagy NULL ha meg van jelölve, @triggername DML trigger.
Kódértékek visszaadása
0 (siker) és 1 (kudarc).
Megjegyzések
Ez a rész az adatkezelő nyelv (DML) és az adatdefiníciós nyelv (DDL) triggerek megfontolására vonatkozó szempontokat tárgyalja.
DML kiváltók
Egyetlen táblázaton minden állításhoz csak egy First és egy Last trigger lehet.
Ha egy First trigger már definiálva van a táblán, adatbázison vagy szerveren, akkor nem lehet új triggert jelölni ugyanahhoz First a táblához, adatbázishoz vagy szerverhez ugyanazon @stmttype-nél. Ez a korlátozás a triggereket is alkalmazza Last .
A replikáció automatikusan generál első triggert bármely olyan táblázat számára, amely azonnali frissítési vagy sorba került frissítési előfizetésbe van beépítve. A replikációhoz megköveteli, hogy az ő triggerje legyen az első. A replikáció hibát okoz, amikor megpróbálsz egy táblázatot beilleszteni egy első triggerrel egy azonnali frissítési vagy sorba helyezett frissítési előfizetésbe. Ha megpróbálsz egy triggeret első triggernek tenni, miután egy táblázat bekerült az előfizetésbe, sp_settriggerorder akkor hiba jelenik meg. Ha ALTER TRIGGER a replikációs triggeret használod, vagy sp_settriggerorder a replikációs triggeret LastNone vagy triggerre módosítod, az előfizetés nem működik megfelelően.
DDL-eseményindítók
Ha ugyanazon az eseményen létezik egy adatbázis hatótávú DDL trigger és szerver hatótávú DDL trigger, akkor megadhatod, hogy mindkét trigger legyen trigger First vagy Last trigger. Azonban a szerver-hatótávolságú triggerek mindig először aktiválódnak. Általánosságban a DDL triggerek végrehajtási sorrendje, amelyek ugyanazon az eseményen léteznek, a következő:
- A szerverszintű trigger megjelölve
First - Egyéb szerverszintű triggerek
- A szerverszintű trigger megjelölve
Last - Az adatbázis-szintű trigger megjelölve
First - Egyéb adatbázis-szintű triggerek
- Az adatbázis-szintű trigger megjelölve
Last
Az eseményindító általános szempontjai
Ha egy ALTER TRIGGER utasítás megváltoztatja az első vagy utolsó triggeret, az First eredetileg beállított vagy Last attribútum elmarad, és az értéket helyettesítik .None A rendelési értéket a használatával sp_settriggerorderkell visszaállítani.
Ha ugyanazt a triggert kell kijelölni első vagy utolsó sorrendként több mondattípus esetén, sp_settriggerorder akkor minden utasítástípushoz végrehajtani kell. Emellett a triggeret először meg kell határozni egy utasítástípusra, mielőtt az adott utasítástípus esetében az vagy First triggerként lehetne kijelölniLast.
Permissions
Egy DDL trigger sorrendjének beállítása szerver hatókörrel (létrehozva ON ALL SERVER) vagy bejelentkezési triggerrel engedélyt igényel CONTROL SERVER .
A DDL trigger sorrendjének beállításához az adatbázis hatótávja (létrehozva ON DATABASE) engedélyt igényel ALTER ANY DATABASE DDL TRIGGER .
A DML trigger sorrendjének meghatározásához engedély ALTER szükséges azon a táblán vagy nézeten, ahol a trigger meg van határozva.
Példák
A. Állítsd be a DML ravasz kilőtési sorrendjét
Az alábbi példa azt mutatja, hogy a trigger uSalesOrderHeader az első trigger, amely elindul egy UPDATE művelet után az Sales.SalesOrderHeader asztalon.
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'Sales.uSalesOrderHeader',
@order = 'First',
@stmttype = 'UPDATE';
B. Állítsd be a DDL ravasz kilőtési sorrendjét
Az alábbi példa azt mutatja, hogy a trigger ddlDatabaseTriggerLog az első trigger, amely az adatbázisban történt ALTER_TABLE esemény AdventureWorks2025 után aktiválódik.
USE AdventureWorks2022;
GO
EXECUTE sp_settriggerorder
@triggername = 'ddlDatabaseTriggerLog',
@order = 'First',
@stmttype = 'ALTER_TABLE',
@namespace = 'DATABASE';