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 a DML, DDL vagy bejelentkezési trigger definícióját, amelyet korábban az utasítás CREATE TRIGGER hozott létre. A triggereket a használatával CREATE TRIGGERhozzuk 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ókért a kifejezésben használt ALTER TRIGGER paraméterekről lásdCREATE 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 trigger WITH ENCRYPTION használatával jön létre, akkor ezt újra meg kell határozni a ALTER TRIGGER nyilatkozatban, hogy ez az opció engedélyezve maradjon.
EXECUTE AS
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 HELYETTE OF trigger definiálható egy INSERTtáblán UPDATEDELETE 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 kell eltávolítania, ALTER VIEW mielőtt megadja a HELYETTE a triggert.
{ [ DELETE ] [ , ] [ ] [ INSERT ] [ , ] [ UPDATE ] } | { [INSERT ] [ , ] [ ] } UPDATE
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 ez DELETE az opció nem engedélyezett olyan táblákon, amelyeknek referenciakapcsolata van egy kaszkád művelet ON DELETE-én meghatározásával. Hasonlóképpen, ez UPDATE az opció nem engedélyezett olyan táblákon, amelyeknek referencia kapcsolata van egy kaszkád művelet ON UPDATE-n. 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. Miután ALTER TRIGGER vége a futtatásnak, event_group makroként is működik, hozzáadva az általa lefedett eseménytípusokat a sys.trigger_events katalógusnézethez.
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 ALTER TRIGGERlásd a (Transact-SQL) megjegyzéseketCREATE TRIGGER.
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
ALTER TRIGGER támogatja a kézzel frissíthető nézeteket INSTEAD OF triggerekkel a táblákon és nézeteken. SQL Server ALTER TRIGGER ugyanígy alkalmazható 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 állítás megváltoztatja az első vagy utolsó triggeret, 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 minden referenciális kaszkádot UPDATE és DELETE az adott utasítás által okozott cselekvést.
Ha egy DELETE művelet egy gyerek vagy hivatkozási táblára egy CASCADE eredménye az anyi táblán A-n DELETE , és egy HELYETTE OF trigger DELETE van definiálva a gyermektáblán, akkor a triggeret figyelmen kívül hagyják, és az DELETE akciót végrehajtják.
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ótávval (ON DATABASE) definiált DDL trigger módosításához minden DATABASE 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:
DROP TRIGGER (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
DISABLE TRIGGER (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