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
Módosítja egy korábban a CREATE TRIGGER utasítással létrehozott DML, DDL vagy bejelentkezési trigger definícióját. A triggereket a CREATE TRIGGER használatával hozzák létre. Közvetlenül Transact-SQL utasításokból vagy a Microsoft .NET Framework common language runtime-ban (CLR) létrehozott összeállítások metódusaiból hozhatók létre, és feltölthetők egy SQL Server példányra. További információért az ALTER TRIGGER utasításban használt paraméterekről lásd: CREATE TRIGGER (Transact-SQL) .
Transact-SQL szintaxis konvenciók
Szemantika
-- SQL Server Syntax
-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
ALTER TRIGGER schema_name.trigger_name
ON ( table | view )
[ WITH <dml_trigger_option> [ ,...n ] ]
( FOR | AFTER | INSTEAD OF )
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME <method specifier>
[ ; ] }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ <EXECUTE AS Clause> ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Trigger on an INSERT, UPDATE, or DELETE statement to a table
-- (DML Trigger on memory-optimized tables)
ALTER TRIGGER schema_name.trigger_name
ON ( table )
[ WITH <dml_trigger_option> [ ,...n ] ]
( FOR | AFTER )
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
AS { sql_statement [ ; ] [ ...n ] }
<dml_trigger_option> ::=
[ NATIVE_COMPILATION ]
[ SCHEMABINDING ]
[ <EXECUTE AS Clause> ]
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE,
-- or UPDATE statement (DDL Trigger)
ALTER TRIGGER trigger_name
ON { DATABASE | ALL SERVER }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type [ ,...n ] | event_group }
AS { sql_statement [ ; ] | EXTERNAL NAME <method specifier>
[ ; ] }
}
<ddl_trigger_option> ::=
[ ENCRYPTION ]
[ <EXECUTE AS Clause> ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Trigger on a LOGON event (Logon Trigger)
ALTER TRIGGER trigger_name
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >
[ ; ] }
<logon_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Azure SQL Database Syntax
-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
ALTER TRIGGER schema_name. trigger_name
ON (table | view )
[ WITH <dml_trigger_option> [ ,...n ] ]
( FOR | AFTER | INSTEAD OF )
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }
AS { sql_statement [ ; ] [...n ] }
<dml_trigger_option> ::=
[ <EXECUTE AS Clause> ]
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE statement (DDL Trigger)
ALTER TRIGGER trigger_name
ON { DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type [ ,...n ] | event_group }
AS { sql_statement
[ ; ] }
}
<ddl_trigger_option> ::=
[ <EXECUTE AS Clause> ]
Arguments
schema_name
Ez annak a sémának a neve, amelyhez egy DML trigger tartozik. A DML triggerek a táblázat vagy nézet sémájához vannak kötve, amelyen létrehozták őket.
a séma*_name* csak akkor opcionális, ha a DML trigger és annak megfelelő táblázat vagy nézet az alapértelmezett sémához tartozik.
schema_name nem lehet megadni DDL vagy bejelentkezési triggerekhez.
trigger_name
A meglévő kiváltó módosítandó tényező.
asztal | nézet
Az a tábla vagy nézet, amelyen a DML trigger végrehajtható. A tábla vagy nézet teljes minősített nevének megadása opcionális.
DATABASE
Egy DDL-eseményindító hatókörét alkalmazza az aktuális adatbázisra. Ha meg van adva, az eseményindító minden alkalommal aktiválódik, amikor event_type vagy event_group történik az aktuális adatbázisban.
MINDEN KISZOLGÁLÓ
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.
Egy DDL- vagy bejelentkezési eseményindító hatókörét alkalmazza az aktuális kiszolgálóra. Ha meg van adva, az eseményindító minden alkalommal aktiválódik, amikor event_type vagy event_group az aktuális kiszolgálón bárhol előfordul.
TITKOSÍTÁSSAL
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.
Titkosítja azokat a sys.syscommentssys.sql_modules bejegyzéseket, amelyek tartalmazzák az ALTER TRIGGER utasítás szövegét. A TITKOSÍTÁSSAL való használat megakadályozza, hogy a trigger az SQL Server replikáció részeként megjelenjen. WITH ENCRYPTION nem lehet megadni CLR triggerekhez.
Megjegyzés:
Ha egy triggeret WITH ENCRYPTION használatával hoznak létre, akkor az ALTER TRIGGER utasításban ismét meg kell határozni, hogy ez az opció engedélyezve maradjon.
VÉGREHAJTÁS MÁSKÉNT
Megadja az eseményindító végrehajtásának biztonsági környezetét. Lehetővé teszi, hogy az SQL Server példánya által használt felhasználói fiókot ellenőrizze bármely olyan adatbázis-objektum jogainak ellenőrzésére, amelyekre a trigger hivatkozik.
További információ: EXECUTE AS záradék (Transact-SQL).
NATIVE_COMPILATION
Azt jelzi, hogy az eseményindító natív módon van lefordítva.
Ez a beállítás a memóriaoptimalizált táblák eseményindítóihoz szükséges.
SÉMAKÖTÉS
Biztosítja, hogy a trigger által hivatkozott táblák ne hagyhatók el vagy ne változtassanak.
Ez az opció memóriaoptimalizált táblák triggerjeihez szükséges, hagyományos táblákon pedig nem támogatott.
UTÁN
Megadja, hogy a trigger csak akkor aktiválódik, ha a trigger SQL utasítást sikeresen végrehajtották. Minden referencia kaszkád akció és korlátozásellenőrzés sikeres volt, mielőtt ez a trigger beindulna.
A AFTER az alapértelmezett opció, ha csak a FOR kulcsszó van megadva.
DML AFTER triggerek csak táblázatokon definiálhatók.
AHELYETT, HOGY
Megadja, hogy a DML trigger hajt végre a trigger SQL utasítás helyett, így felülírja a trigger utasítások műveleteit. INSTEAD OF nem lehet megadni DDL vagy bejelentkezési triggerekhez.
Legfeljebb egy INSTEAD OF trigger definiálható egy INSERT, UPDATE vagy DELETE utasítás alatt egy táblázaton vagy nézeten. Azonban definiálhatsz nézeteket olyan nézetekre, ahol minden nézetnek megvan a saját HELYETTE triggere.
Az INSTEAD triggerek nem engedélyezettek olyan nézetekben, amelyeket a WITH CHECK opcióval hoztak létre. Az SQL Server hibát jelez, ha egy HELYETTE triggert adnak hozzá egy olyan nézethez, amelyhez WITH CHECK OPTION meg van szabva. A felhasználónak ezt az opciót el kell távolítania az ALTER VIEW segítségével, mielőtt meghatározná a INSTEAD OF trigger-et.
{ [ TÖRLÉS ] [ , ] [ BEILLESZTÉS ] [ , ] [ FRISSÍTÉS ] } | { [BEILLESZTÉS] [ , ] [ FRISSÍTÉS ] }
Megadja az adatmódosító állításokat, ha ezen a táblán vagy nézeten próbálkoznak, aktiválja a DML triggeret. Legalább egy lehetőséget meg kell adni. Ezek bármely kombinációja, bármilyen sorrendben engedélyezett a trigger definíciójában. Ha több opció van megadva, szegéllyel választd el az opciókat.
OF triggerek helyett a DELETE opció nem engedélyezett olyan táblákon, amelyek hivatkozási kapcsolata van egy kaszkád művelet TÖRLÉSE UTÁN megjelölésével. Hasonlóképpen, a FRISSÍTÉS opció nem engedélyezett azokon a táblákban, amelyek hivatkozási kapcsolatban rendelkeznek, amely kaszkád műveletet FRISSÍTÉSKOR határoz meg. További információ: ALTER TABLE (Transact-SQL).
event_type
Egy Transact-SQL nyelvi esemény neve, amely végrehajtás után DDL trigger aktiválását okozza. A DDL-eseményindítók érvényes eseményei szerepelnek a DDL-események között.
event_group
A Transact-SQL nyelvi események előre meghatározott csoportja. A DDL trigger bármely Transact-SQL nyelvi esemény végrehajtása után aktiválódik, amely a event_group-hez tartozik. A DDL-eseményindítók érvényes eseménycsoportjai a DDL-eseménycsoportokban jelennek meg. Az ALTER TRIGGER futtatása után event_group makroként is működik, amely hozzáadja az általa lefedett eseménytípusokat a sys.trigger_events katalógus nézetéhez.
REPLIKÁCIÓHOZ NEM
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.
Azt jelzi, hogy a triggert nem szabad végrehajtani, amikor egy replikációs ügynök módosítja a triggerhez kapcsolódó táblát.
sql_statement
A kiváltó feltételek és cselekvések.
Memóriaoptimalizált táblákon indító triggereknél a legfelső szinten az egyetlen sql_statement az ATOMIC blokk. Az ATOMIC blokkban engedélyezett T-SQL korlátozott a natív proc-okon belül engedélyezett T-SQL.
KÜLSŐ NÉV <method_specifier>
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.
Megadja az összeállítás módszerét, amellyel a triggerrel köthető meg. A metódusnak nem szabad argumentumokat használnia, és érvénytelennek kell lennie. class_name érvényes SQL Server-azonosítónak kell lennie, és osztályként kell léteznie a szerelvényben a szerelvény láthatóságával. Az osztály nem lehet beágyazott osztály.
Megjegyzések
További információért az ALTER TRIGGER-ről lásd: Megjegyzések a CREATE TRIGGER (Transact-SQL) című részben.
Megjegyzés:
A EXTERNAL_NAME és ON_ALL_SERVER opciók nem elérhetők egy zárt adatbázisban.
DML-eseményindítók
Az ALTER TRIGGER támogatja a táblázatokon és nézeteken INSTEAD triggereken keresztül manuálisan frissíthető nézeteket. Az SQL Server ugyanúgy alkalmazza az ALTER TRIGGER-et mindenféle triggerre (AFTER, INSTEAD-OF).
Az első és az utolsó AFTER triggerek, amelyeket egy táblán végrehajtani, az sp_settriggerorder használatával lehet megadni. Egy táblázaton csak egy első és egy utolsó UTÁNA trigger lehet megadni. Ha ugyanazon az asztalon vannak más AFTER triggerek, akkor véletlenszerűen futnak le.
Ha egy ALTER TRIGGER utasítás megváltoztatja az első vagy utolsó triggert, a módosított trigger első vagy utolsó attribútuma elmarad, és a rendelési értéket sp_settriggerorder használatával kell visszaállítani.
Az AFTER trigger csak akkor történik, ha a trigger SQL utasítás sikeres végrehajtása lett. Ez a sikeres végrehajtás magában foglalja a frissített vagy törölt objektumhoz társított összes hivatkozási kaszkádolt műveletet és kényszerellenőrzést. Az AFTER trigger művelet ellenőrzi a trigger utasítás hatásait, valamint az összes hivatkozási kaszkád UPDATE és DELETE műveletet, amelyeket a trigger utasítás okoz.
Amikor egy DELETE művelet egy gyermek- vagy hivatkozási táblára egy CASCADE eredménye egy DELETE tagon a szülőtáblából, és a DELETE helyett trigger van definiálva a gyermektáblán, akkor a triggert figyelmen kívül hagyják, és a DELETE művelet végrehajtásra kerül.
DDL eseményindítók
A DML triggerekkel ellentétben a DDL triggerek nem sémákhoz vannak korlátozva. Ezért a OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY és OBJECTPROPERTY(EX) nem használhatók DDL triggerekről szóló metaadat lekérdezésekkor. Használja inkább a katalógusnézeteket. További információt a DDL-eseményindítókról szóló információk lekérése című témakörben talál.
Bejelentkezési eseményindítók
Az Azure SQL Database nem támogatja a triggereket bejelentkezési eseményeken.
Permissions
Egy DML trigger megváltoztatásához ALTER engedély szükséges azon a táblán vagy nézeten, ahol a trigger van definiálva.
Egy szerver hatókörrel (ALL SERVEREN) vagy bejelentkezési trigger módosításához a szerveren CONTROL SERVER engedélyre van szükség. Egy adatbázis hatókörrel (ON DATABASE) definiált DDL trigger módosításához MINDEN ADATBÁZIS DDL TRIGGER engedélyt kell módosítani a jelenlegi adatbázisban.
Példák
A következő példa egy DML triggeret hoz létre az AdventureWorks2025 adatbázisban, amely felhasználó által definiált üzenetet nyomtat a kliensnek, amikor a felhasználó megpróbál adatokat hozzáadni vagy módosítani a SalesPersonQuotaHistory táblában. A triggeret ezután úgy módosítják, ALTER TRIGGER hogy csak INSERT tevékenységekre alkalmazzák. Ez az eseményindító azért hasznos, mert emlékezteti a felhasználót arra, hogy frissíti vagy beszúrja a sorokat ebbe a táblába, hogy a Compensation részleget is értesítse.
CREATE TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
WITH ENCRYPTION
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Compensation', 16, 10);
GO
-- Now, change the trigger.
ALTER TRIGGER Sales.bonus_reminder
ON Sales.SalesPersonQuotaHistory
AFTER INSERT
AS RAISERROR ('Notify Compensation', 16, 10);
GO
Lásd még:
EJTŐ TRIGGER (Transact-SQL)
AZ INDÍTÓ ENGEDÉLYEZÉSE (Transact-SQL)
TRIGGER LETILTÁSA (Transact-SQL)
ESEMÉNYADATOK (Transact-SQL)
sp_helptrigger (Transact-SQL)
Tárolt eljárás létrehozása
sp_addmessage (Transact-SQL)
Tranzakciók
Információk szerzése a DML-eseményindítókról
DDL-eseményindítók adatainak lekérése
sys.triggers (Transact-SQL)
sys.trigger_events (Transact-SQL)
sys.sql_modulok (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.server_triggers (Transact-SQL)
sys.server_trigger_events (Transact-SQL)
sys.server_sql_modules (Transact-SQL)
sys.server_assembly_modules (Transact-SQL)
Sémamódosítások a kiadványi adatbázisokon