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
Megadhatja, hogy a táblához társított AFTER eseményindítók egyike legyen az első AFTER eseményindító, vagy az utolsó AFTER eseményindító, amely az egyes INSERT, DELETE és UPDATE eseményindító műveletekhez aktiválódik. Az első és az utolsó eseményindító között aktivált AFTER-eseményindítók nem definiált sorrendben lesznek végrehajtva.
Az UTÓLAGOS eseményindító sorrendjének megadásához használja a sp_settriggerorder tárolt eljárást. sp_settriggerorder a következő lehetőségek közül választhat.
| Opció | Leírás |
|---|---|
| Első | Megadja, hogy a DML-trigger az elsőként végrehajtott AFTER trigger, amely a megadott művelethez aktiválódik. |
| Utolsó | Azt adja meg, hogy a DML-eseményindító az utolsó after trigger, amelyet egy eseményindító művelet aktivál. |
| Nincs | Azt határozza meg, hogy nincs konkrét sorrend, amelyben a DML-eseményindítót aktiválni kell. Főként arra szolgál, hogy a triggert első vagy utolsó állapotából visszaállítsa. |
Az alábbi példa a sp_settriggerorderhasználatát mutatja be:
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Fontos
Az első és az utolsó eseményindítónak két különböző DML-eseményindítónak kell lennie.
A táblákon egyszerre definiálhatók INSERT, UPDATE és DELETE triggerek. Mindegyik utasítástípusnak lehetnek saját első és utolsó eseményindítói, de nem lehetnek ugyanazok az eseményindítók.
Ha a táblához definiált első vagy utolsó eseményindító nem fed le egy eseményindító műveletet, például nem fedi le a FOR UPDATE, a FOR DELETE vagy a FOR INSERT függvényt, a hiányzó műveletekhez nincs első vagy utolsó eseményindító.
Az INSTEAD OF eseményindítók nem adhatók meg sem első, sem utolsó eseményindítóként. Ahelyett, hogy aktiválja az eseményindítókat, mielőtt a rendszer frissítéseket végez az alapul szolgáló táblákon. Ha egy INSTEAD OF eseményindító hajt végre frissítéseket a mögöttes táblákon, akkor ezek a frissítések még azelőtt megtörténnek, hogy a táblán definiált AFTER eseményindítók aktiválódnának. Ha például egy nézet BESZÚRÁS HELYETT triggerje adatokat szúr be egy alaptáblába, és maga az alaptábla is tartalmaz egy BESZÚRÁS HELYETT triggert és három BESZÚRÁS UTÁNI triggert, akkor a beszúrási művelet helyett az alaptáblán a BESZÚRÁS HELYETT trigger lesz aktiválva, az alaptáblán lévő BESZÚRÁS UTÁNI triggerek pedig minden az alaptáblán végzett beszúrási művelet után aktiválódnak. További információ: DML-eseményindítók.
Ha egy ALTER TRIGGER utasítás módosítja az első vagy az utolsó triggert, a Első vagy Utolsó attribútum eltávolításra kerül, és a sorrend értéke Nincs. A rendelést a sp_settriggerorderhasználatával kell visszaállítani.
Az OBJECTPROPERTY függvény a következő tulajdonságok használatával jelenti, hogy az eseményindító első vagy utolsó eseményindító-e: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggerés ExecIsLastDeleteTrigger.
A replikáció automatikusan létrehoz egy első eseményindítót minden olyan táblához, amely egy azonnali frissítési vagy várólistán lévő frissítési előfizetés része. A replikáció megköveteli, hogy az eseményindító legyen az első eseményindító. A replikáció hibát jelez, ha egy első eseményindítót tartalmazó táblát próbál meg felvenni egy azonnali frissítési vagy várólistán lévő frissítési előfizetésbe. Ha első eseményindítót próbál létrehozni, miután egy táblát belefoglalt egy előfizetésbe, sp_settriggerorder hibát ad vissza. Ha ALTER-t használ a replikációs eseményindítón, vagy a sp_settriggerorder használatával módosítja a replikációs eseményindítót egy utolsó vagy egyetlen eseményindítóra, az előfizetés nem fog megfelelően működni.
Lásd még:
OBJEKTUMTULAJDONSÁG (Transact-SQL) )
sp_settriggerorder (Transact-SQL)