Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Modifierar definitionen av en DML-, DDL- eller inloggningsutlösare som tidigare skapades av CREATE TRIGGER-satsen. Triggers skapas genom att använda CREATE TRIGGER. De kan skapas direkt från Transact-SQL-satser eller från metoder i assembler som skapas i Microsoft .NET Frameworks common language runtime (CLR) och laddas upp till en instans av SQL Server. För mer information om parametrarna som används i ALTER TRIGGER-satsen, se CREATE TRIGGER (Transact-SQL).
Transact-SQL syntaxkonventioner
Syntax
-- 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
Är namnet på schemat som en DML-trigger tillhör. DML-triggers är begränsade till schemat i tabellen eller vyn där de skapas.
schema*_name* är valfritt endast om DML-triggern och dess motsvarande tabell eller vy tillhör standardschemat.
schema_name kan inte specificeras för DDL- eller inloggningstriggers.
trigger_name
Är den befintliga triggern att modifiera.
bord | utsikt
Är tabellen eller vyn där DML-triggern körs. Att ange det fullt kvalificerade namnet på tabellen eller vyn är valfritt.
DATABAS
Tillämpar omfånget för en DDL-utlösare på den aktuella databasen. Om det anges utlöses utlösaren när event_type eller event_group inträffar i den aktuella databasen.
ALLA SERVRAR
gäller för: SQL Server 2008 (10.0.x) och senare.
Tillämpar omfånget för en DDL- eller inloggningsutlösare på den aktuella servern. Om det anges utlöses utlösaren när event_type eller event_group inträffar någonstans på den aktuella servern.
MED KRYPTERING
gäller för: SQL Server 2008 (10.0.x) och senare.
Krypterar sys.syscommentssys.sql_modules-posterna som innehåller texten i ALTER TRIGGER-satsen. Att använda WITH ENCRYPTION förhindrar att triggern publiceras som en del av SQL Server-replikeringen. WITH ENCRYPTION kan inte specificeras för CLR-triggers.
Anmärkning
Om en trigger skapas med WITH ENCRYPTION måste den specificeras igen i ALTER TRIGGER-satsen för att detta alternativ ska förbli aktiverat.
KÖR SOM
Anger säkerhetskontexten under vilken utlösaren körs. Gör det möjligt att kontrollera användarkontot som SQL Server-instansen använder för att validera behörigheter på alla databasobjekt som refereras av triggern.
Mer information finns i EXECUTE AS-satsen (Transact-SQL).
NATIVE_COMPILATION
Anger att utlösaren är internt kompilerad.
Det här alternativet krävs för utlösare i minnesoptimerade tabeller.
SCHEMABINDNING
Säkerställer att tabeller som refereras av en trigger inte kan tas bort eller ändras.
Detta alternativ krävs för triggers på minnesoptimerade tabeller och stöds inte för triggers på traditionella tabeller.
EFTER
Specificerar att triggern endast avfyras efter att den utlösande SQL-satsen har körts framgångsrikt. Alla referenskaskadåtgärder och begränsningskontroller måste också ha varit framgångsrika innan denna utlösare aktiveras.
AFTER är standard, om endast nyckelordet FOR är angivet.
DML AFTER-triggers kan endast definieras på tabeller.
ISTÄLLET FÖR
Specificerar att DML-triggern körs istället för den utlösande SQL-satsen, vilket därmed åsidosätter handlingarna hos de utlösande satserna. INSTEAD OF kan inte specificeras för DDL- eller inloggningstriggers.
Högst kan en INSTEAD OF-trigger per INSERT-, UPDATE- eller DELETE-sats definieras i en tabell eller vy. Du kan dock definiera vyer på vyer där varje vy har sin egen ISTÄLLET FÖR AV-trigger.
INSTEAD OF är triggers inte tillåtna på vyer skapade med MED MARKERING-ALTERNATIVET. SQL Server ger ett fel när en INSTEAD OF-trigger läggs till i en vy för vilken WITH CHECK OPTION specificerades. Användaren måste ta bort det alternativet med ALTER VIEW innan utlösaren INSTEAD OF definieras.
{ [ RADERA ] [ , ] [ INFOGA ] [ , ] [ UPPDATERING ] } | { [INFOGA ] [ , ] [ UPPDATERING ] }
Specificerar att dataändringarssatserna, när de prövas mot denna tabell eller vy, aktiverar DML-triggern. Minst ett alternativ måste anges. Varje kombination av dessa i valfri ordning är tillåten i triggerdefinitionen. Om mer än ett alternativ anges, separera alternativen med kommatecken.
För INSTEAD OF-triggers är DELETE-alternativet inte tillåtet på tabeller som har en referensrelation som specificerar en kaskadåtgärd VID DELETE. På samma sätt är UPDATE-alternativet inte tillåtet i tabeller som har en referensrelation som specificerar en kaskadåtgärd VID UPPDATERING. Mer information finns i ALTER TABLE (Transact-SQL).
event_type
Är namnet på en händelse på ett Transact-SQL språk som, efter exekvering, får en DDL-trigger att utlösas. Giltiga händelser för DDL-utlösare visas i DDL-händelser.
event_group
Är namnet på en fördefinierad grupp av Transact-SQL språkhändelser. DDL-triggern aktiveras efter att någon Transact-SQL språkhändelse som tillhör event_group körs. Giltiga händelsegrupper för DDL-utlösare visas i DDL-händelsegrupper. Efter att ALTER TRIGGER har körts klart fungerar event_group också som ett makro genom att lägga till de händelsetyper den täcker i sys.trigger_events katalogvyn.
INTE FÖR REPLIKERING
gäller för: SQL Server 2008 (10.0.x) och senare.
Indikerar att triggern inte bör exekveras när en replikationsagent modifierar tabellen som är involverad i triggern.
sql_statement
Är utlösarvillkoren och handlingarna.
För triggers på minnesoptimerade tabeller är det enda sql_statement tillåtet på toppnivå ett ATOMIC-block. Den T-SQL som tillåts i ATOMIC-blocket begränsas av den T-SQL som tillåts i inbyggda procs.
EXTERNT NAMN <method_specifier>
gäller för: SQL Server 2008 (10.0.x) och senare.
Specificerar metoden för en montering som ska binda till triggern. Metoden får inte ta några argument och returnera void. class_name måste vara en giltig SQL Server-identifierare och måste finnas som en klass i sammansättningen med sammansättningssynlighet. Klassen kan inte vara en nästlad klass.
Anmärkningar
För mer information om ALTER TRIGGER, se Anmärkningar i CREATE TRIGGER (Transact-SQL).
Anmärkning
Alternativen EXTERNAL_NAME och ON_ALL_SERVER finns inte tillgängliga i en innehållsbaserad databas.
DML-utlösare
ALTER TRIGGER stöder manuellt uppdaterabara vyer genom INSTEAD OF-triggers på tabeller och vyer. SQL Server applicerar ALTER TRIGGER på samma sätt för alla slags triggers (EFTER, INSTEAD-OF).
De första och sista EFTER-triggerna som ska köras på en tabell kan specificeras genom att använda sp_settriggerorder. Endast en första och en sista EFTER-trigger kan anges i en tabell. Om det finns andra AFTER-triggers på samma tabell körs de slumpmässigt.
Om en ALTER TRIGGER-sats ändrar en första eller sista trigger, tas det första eller sista attributet som satts på den modifierade triggern bort, och ordervärdet måste återställas genom att använda sp_settriggerorder.
En AFTER-trigger körs först efter att den utlösande SQL-satsen har körts framgångsrikt. Den här lyckade körningen omfattar alla referensåtgärder och villkorskontroller som är associerade med objektet som har uppdaterats eller tagits bort. AFTER-triggeroperationen kontrollerar effekterna av trigger-satsen samt alla referensmässiga kaskadåtgärder UPDATE- och DELETE-åtgärder som orsakas av trigger-satsen.
När en DELETE-åtgärd till en barn- eller referenstabell är resultatet av en CASCADE på en DELETE från föräldertabellen, och en INSTEAD OF-trigger på DELETE definieras på den barntabellen, ignoreras triggern och DELETE-åtgärden utförs.
DDL-utlösare
Till skillnad från DML-triggers är DDL-triggers inte begränsade till scheman. Därför kan inte OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY och OBJECTPROPERTY(EX) användas vid förfrågningar av metadata om DDL-triggers. Använd katalogvyerna i stället. Mer information finns i Hämta information om DDL-utlösare.
Inloggningsutlösare
Azure SQL Database stöder inte triggers vid inloggningshändelser.
Permissions
För att ändra en DML-trigger krävs ALTER-behörighet på tabellen eller vyn där triggern är definierad.
För att ändra en DDL-trigger definierad med serveromfång (PÅ ALLA SERVRAR) eller en inloggningsutlösare krävs CONTROL SERVER-behörighet på servern. För att ändra en DDL-trigger definierad med databasomfattning (ON DATABASE) krävs behörighet ÄNDRA VILKEN DATABAS SOM HELST DDL-TRIGGER i den aktuella databasen.
Examples
Följande exempel skapar en DML-trigger i databasen AdventureWorks2025 som skriver ut ett användardefinierat meddelande till klienten när en användare försöker lägga till eller ändra data i tabellen SalesPersonQuotaHistory . Triggern modifieras sedan genom att använda ALTER TRIGGER för att applicera triggern endast på INSERT aktiviteter. Den här utlösaren är användbar eftersom den påminner användaren om att uppdatera eller infoga rader i den här tabellen samt att meddela Compensation-avdelningen.
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
Se även
DROP TRIGGER (Transact-SQL)
AKTIVERA UTLÖSARE (Transact-SQL)
INAKTIVERA UTLÖSARE (Transact-SQL)
HÄNDELSEDATA (Transact-SQL)
sp_helptrigger (Transact-SQL)
Skapa en lagrad procedur
sp_addmessage (Transact-SQL)
Transaktioner
Hämta information om DML-trigger
Hämta information om DDL-utlösare
sys.triggers (Transact-SQL)
sys.trigger_events (Transact-SQL)
sys.sql_moduler (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)
Gör schemaändringar i publikationsdatabaser