Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Wijzigt de definitie van een DML-, DDL- of logon-trigger die eerder is gemaakt door de CREATE TRIGGER-instructie. Triggers worden gemaakt door CREATE TRIGGER te gebruiken. Ze kunnen direct worden aangemaakt vanuit Transact-SQL statements of uit methoden van assemblies die zijn gemaakt in de Microsoft .NET Framework common language runtime (CLR) en geüpload naar een instantie van SQL Server. Voor meer informatie over de parameters die in de ALTER TRIGGER-instructie worden gebruikt, zie CREATE TRIGGER (Transact-SQL).
Transact-SQL syntaxis-conventies
Syntaxis
-- 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
Is de naam van het schema waartoe een DML-trigger behoort. DML-triggers zijn beperkt tot het schema van de tabel of weergave waarop ze zijn gemaakt.
schema*_name* is alleen optioneel als de DML-trigger en de bijbehorende tabel of weergave tot het standaardschema behoren.
schema_name kan niet worden gespecificeerd voor DDL- of logontriggers.
trigger_name
Is de bestaande trigger om te wijzigen?
tafel | bekijken
Is de tabel of weergave waarop de DML-trigger wordt uitgevoerd. Het specificeren van de volledig gekwalificeerde naam van de tabel of weergave is optioneel.
DATABASE
Hiermee past u het bereik van een DDL-trigger toe op de huidige database. Indien opgegeven, wordt de trigger geactiveerd wanneer event_type of event_group plaatsvindt in de huidige database.
ALLE SERVER
van toepassing op: SQL Server 2008 (10.0.x) en hoger.
Hiermee past u het bereik van een DDL- of aanmeldingstrigger toe op de huidige server. Indien opgegeven, wordt de trigger geactiveerd wanneer event_type of event_group ergens op de huidige server plaatsvindt.
MET VERSLEUTELING
van toepassing op: SQL Server 2008 (10.0.x) en hoger.
Versleutelt de sys.syscommentssys.sql_modules-vermeldingen die de tekst van de ALTER TRIGGER-instructie bevatten. Het gebruik van WITH ENCRYPTION voorkomt dat de trigger wordt gepubliceerd als onderdeel van SQL Server-replicatie. WITH ENCRYPTION kan niet worden gespecificeerd voor CLR-triggers.
Opmerking
Als een trigger wordt aangemaakt met WITH ENCRYPTION, moet deze opnieuw worden gespecificeerd in de ALTER TRIGGER-instructie om deze optie ingeschakeld te houden.
UITVOEREN ALS
Hiermee geeft u de beveiligingscontext op waaronder de trigger wordt uitgevoerd. Hiermee kun je het gebruikersaccount beheren dat de instantie van SQL Server gebruikt om rechten te valideren op databaseobjecten waarnaar de trigger verwijst.
Zie EXECUTE AS-component (Transact-SQL) voor meer informatie.
NATIVE_COMPILATION
Geeft aan dat de trigger systeemeigen is gecompileerd.
Deze optie is vereist voor triggers in tabellen die zijn geoptimaliseerd voor geheugen.
SCHEMABINDING
Zorgt ervoor dat tabellen die door een trigger worden aangeduid, niet kunnen worden verwijderd of aangepast.
Deze optie is vereist voor triggers op geheugengeoptimaliseerde tabellen en wordt niet ondersteund voor triggers op traditionele tabellen.
NA
Specificeert dat de trigger pas wordt geactiveerd nadat de triggerende SQL-instructie succesvol is uitgevoerd. Alle referentiele cascadeacties en constraint checks moeten ook succesvol zijn geweest voordat deze trigger wordt afgegeven.
AFTER is de standaard, als alleen het FOR-sleutelwoord wordt opgegeven.
DML AFTER-triggers kunnen alleen op tabellen worden gedefinieerd.
IN PLAATS VAN
Specificeert dat de DML-trigger wordt uitgevoerd in plaats van de triggerende SQL-instructie, waardoor de acties van de triggerende statements worden overgeschreven. INSTEAD OF kan niet worden gespecificeerd voor DDL- of logon-triggers.
Maximaal één INSTEAD OF-trigger per INSERT-, UPDATE- of DELETE-instructie kan worden gedefinieerd op een tabel of weergave. Je kunt echter views definiëren op views waarbij elke view zijn eigen INSTEAD OF-trigger heeft.
INSTEAD OF triggers zijn niet toegestaan op weergaven die worden gemaakt met de MET CONTROLE-OPTIE. SQL Server geeft een foutmelding wanneer een INSTEAD OF-trigger wordt toegevoegd aan een weergave waarvoor de optie WITH CHECK was gespecificeerd. De gebruiker moet die optie verwijderen met ALTER VIEW voordat hij de INSTEAD OF-trigger definieert.
{ [ VERWIJDEREN ] [ , ] [ INVOEGEN ] [ , ] [ UPDATE ] } | { [INSERT ] [ , ] [ UPDATE ] }
Specificeert de datawijzigingsinstructies, die bij het testen tegen deze tabel of weergave de DML-trigger activeren. Er moet ten minste één optie worden opgegeven. Elke combinatie hiervan in willekeurige volgorde is toegestaan in de triggerdefinitie. Als er meer dan één optie is opgegeven, scheid dan de opties met komma's.
Voor INSTEAD OF-triggers is de DELETE-optie niet toegestaan op tabellen die een referentierelatie hebben die een cascadeactie ON DELETE specificeert. Evenzo is de optie UPDATEN niet toegestaan op tabellen die een referentierelatie hebben die een cascadeactie specificeert BIJ UPDATE. Zie ALTER TABLE (Transact-SQL)voor meer informatie.
event_type
Is de naam van een Transact-SQL-taalgebeurtenis die, na uitvoering, ervoor zorgt dat een DDL-trigger activeert. Geldige gebeurtenissen voor DDL-triggers worden vermeld in DDL-gebeurtenissen.
event_group
Is de naam van een vooraf gedefinieerde groepering van Transact-SQL taalgebeurtenissen. De DDL-trigger wordt geactiveerd na het uitvoeren van elk Transact-SQL taal-evenement dat bij event_group hoort. Geldige gebeurtenisgroepen voor DDL-triggers worden vermeld in DDL-gebeurtenisgroepen. Nadat ALTER TRIGGER is uitgevoerd, fungeert event_group ook als macro door de gebeurtenistypes die het behandelt toe te voegen aan de catalogusweergave van de sys.trigger_events.
NIET VOOR REPLICATIE
van toepassing op: SQL Server 2008 (10.0.x) en hoger.
Geeft aan dat de trigger niet uitgevoerd moet worden wanneer een replicatieagent de tabel die bij de trigger betrokken is, aanpast.
sql_statement
Zijn de triggervoorwaarden en acties.
Voor triggers op geheugengeoptimaliseerde tabellen is het enige toegestane sql_statement op het hoogste niveau een ATOMIC-blok. De T-SQL die binnen het ATOMIC-blok is toegestaan, wordt beperkt door de T-SQL die in native procs is toegestaan.
EXTERNE NAAM <method_specifier>
van toepassing op: SQL Server 2008 (10.0.x) en hoger.
Specificeert de methode van een assemblage om met de trigger te binden. De methode mag geen argumenten aannemen en ongeldigheid retourneren. class_name moet een geldige SQL Server-id zijn en moet bestaan als een klasse in de assembly met zichtbaarheid van de assembly. De klasse kan geen geneste klasse zijn.
Opmerkingen
Voor meer informatie over ALTER TRIGGER, zie Opmerkingen in CREATE TRIGGER (Transact-SQL).
Opmerking
De EXTERNAL_NAME- en ON_ALL_SERVER-opties zijn niet beschikbaar in een gesloten database.
DML-triggers
ALTER TRIGGER ondersteunt handmatig updateerbare weergaven via INSTEAD OF-triggers op tabellen en views. SQL Server past ALTER TRIGGER op dezelfde manier toe op allerlei triggers (AFTER, INSTEAD-OF).
De eerste en laatste AFTER-triggers die op een tabel moeten worden uitgevoerd, kunnen worden gespecificeerd met behulp van sp_settriggerorder. Er kunnen slechts één eerste en één laatste NA-trigger worden opgegeven in een tabel. Als er andere AFTER-triggers op dezelfde tabel staan, worden die willekeurig uitgevoerd.
Als een ALTER TRIGGER-instructie een eerste of laatste trigger verandert, wordt het eerste of laatste attribuut op de gewijzigde trigger verwijderd en moet de orderwaarde worden gereset met behulp van sp_settriggerorder.
Een AFTER-trigger wordt pas uitgevoerd nadat de triggerende SQL-instructie succesvol is uitgevoerd. Deze geslaagde uitvoering omvat alle referentiële trapsgewijze acties en beperkingscontroles die zijn gekoppeld aan het object bijgewerkt of verwijderd. De AFTER-triggeroperatie controleert op de effecten van de triggerende instructie en ook op alle referentiele cascadeacties UPDATE- en DELETE-acties die door de triggerende instructie worden veroorzaakt.
Wanneer een DELETE-actie naar een kind- of referentietabel het resultaat is van een CASCADE op een DELETE uit de oudertabel, en er is een INSTEAD OF-trigger op DELETE gedefinieerd op die kindtabel, wordt de trigger genegeerd en wordt de DELETE-actie uitgevoerd.
DDL-triggers
In tegenstelling tot DML-triggers zijn DDL-triggers niet beperkt tot schema's. Daarom kunnen de OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY en OBJECTPROPERTY(EX) niet worden gebruikt bij het opvragen van metadata over DDL-triggers. Gebruik in plaats daarvan de catalogusweergaven. Zie Informatie over DDL-triggers ophalen voor meer informatie.
Aanmeldingstriggers
Azure SQL Database ondersteunt geen triggers bij aanmeldgebeurtenissen.
Permissions
Om een DML-trigger te wijzigen is ALTER-toestemming nodig voor de tabel of weergave waarop de trigger is gedefinieerd.
Om een DDL-trigger te wijzigen die gedefinieerd is met serverscope (OP ALLE SERVER) of een logon-trigger vereist CONTROL SERVER-toestemming op de server. Om een DDL-trigger te wijzigen die is gedefinieerd met databasescope (ON DATABASE), is APPLY ANY DATABASE DDL TRIGGER toestemming in de huidige database vereist.
Voorbeelden
Het volgende voorbeeld creëert een DML-trigger in de AdventureWorks2025 database, die een door de gebruiker gedefinieerd bericht naar de client afdrukt wanneer een gebruiker probeert gegevens in de SalesPersonQuotaHistory tabel toe te voegen of te wijzigen. De trigger wordt vervolgens aangepast door ALTER TRIGGER de trigger alleen op INSERT activiteiten toe te passen. Deze trigger is handig omdat de gebruiker eraan herinnert dat rijen in deze tabel worden bijgewerkt of ingevoegd om ook de Compensation afdeling op de hoogte te stellen.
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
Zie ook
DROP TRIGGER (Transact-SQL)
TRIGGER INSCHAKELEN (Transact-SQL)
TRIGGER UITSCHAKELEN (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_helptrigger (Transact-SQL)
Een opgeslagen procedure maken
sp_addmessage (Transact-SQL)
Transacties
Informatie over DML-triggers ophalen
Informatie over DDL-triggers ophalen
sys.triggers (Transact-SQL)
sys.trigger_events (Transact-SQL)
sys.sql_modules (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)
Verander het schema in publicatiedatabases