Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Mění definici DML, DDL nebo spouštěče přihlášení, která byla dříve vytvořena příkazem CREATE TRIGGER. Spouštěče se vytvářejí pomocí CREATE TRIGGER. Lze je vytvořit přímo z Transact-SQL příkazů nebo z metod assemblerů, které jsou vytvořeny v běžném jazyce Microsoft .NET Framework (CLR) a nahrány do instance SQL Serveru. Pro více informací o parametrech používaných v příkazu ALTER TRIGGER viz CREATE TRIGGER (Transact-SQL).
Syntaxe
-- 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
Je název schématu, ke kterému DML trigger patří. DML triggery jsou omezeny na schéma tabulky nebo pohledu, na kterém jsou vytvořeny.
schema*_name* je volitelné pouze tehdy, pokud DML trigger a odpovídající tabulka nebo pohled patří do výchozího schématu.
schema_name nelze specifikovat pro DDL nebo spouštěče přihlášení.
trigger_name
Je to stávající spouštěč pro úpravu.
stůl | pohled
Je tabulka nebo pohled, na kterém se spustí DML trigger. Specifikace plně kvalifikovaného názvu tabulky nebo pohledu je volitelná.
DATABASE
Použije obor triggeru DDL pro aktuální databázi. Pokud je tato hodnota zadaná, aktivuje se aktivační událost při každém výskytu event_type nebo event_group v aktuální databázi.
ALL SERVER
platí pro: SQL Server 2008 (10.0.x) a novější.
Použije obor triggeru DDL nebo přihlášení na aktuální server. Pokud je tato hodnota zadaná, trigger se aktivuje vždy, když event_type nebo event_group dojde kdekoli na aktuálním serveru.
S ŠIFROVÁNÍM
platí pro: SQL Server 2008 (10.0.x) a novější.
Šifruje položky sys.syscommentssys.sql_modules, které obsahují text příkazu ALTER TRIGGER. Použití WITH ENCRYPTION zabraňuje publikování triggeru jako součásti replikace SQL Serveru. WITH ENCRYPTION nelze specifikovat pro CLR triggery.
Poznámka:
Pokud je spouštěč vytvořen pomocí WITH ENCRYPTION, musí být znovu zadán v příkazu ALTER TRIGGER, aby tato možnost zůstala povolena.
VYKONAT JAKO
Určuje kontext zabezpečení, pod kterým se trigger spouští. Umožňuje vám ovládat uživatelský účet, který instance SQL Serveru používá k ověřování oprávnění na jakékoliv databázové objekty, na které se trigger odkazuje.
Další informace naleznete v tématu EXECUTE AS – klauzule (Transact-SQL).
NATIVE_COMPILATION
Označuje, že trigger je nativně zkompilován.
Tato možnost se vyžaduje pro triggery v tabulkách optimalizovaných pro paměť.
SCHEMABINDING
Zajišťuje, že tabulky, na které se odkazuje spouštěč, nelze vyřadit ani měnit.
Tato možnost je vyžadována pro triggery v tabulkách optimalizovaných pro paměť a není podporována pro triggery v tradičních tabulkách.
PO
Specifikuje, že spouštěč se spustí až po úspěšném provedení spouštěcího SQL příkazu. Všechny referenční kaskádové akce a kontroly omezení musely být také úspěšné před aktivací tohoto spouštěče.
AFTER je výchozí volba, pokud je specifikováno pouze klíčové slovo FOR.
DML AFTER spouštěče mohou být definovány pouze v tabulkách.
NAMÍSTO
Specifikuje, že DML trigger se vykoná místo triggering SQL příkazu, a tím přepisuje akce triggering příkazů. INSTEAD OF nelze specifikovat pro DDL nebo spouštěče přihlášení.
Maximálně lze na tabulce nebo pohledu definovat jeden spouštěč MÍSTO OF. Můžete však definovat pohledy na pohledy, kde má každý pohled svůj vlastní spouštěč MÍSTO toho.
Spouštěče MÍSTO OF nejsou povoleny u zobrazení vytvořených pomocí možnosti S KONTROLOU. SQL Server zobrazí chybu, když je do zobrazení přidán spouštěč MÍSTO OF. Uživatel musí tuto možnost odstranit pomocí ALTER VIEW před definováním spouště INSTEAD OF (MÍSTO NE).
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } | { [VLOŽIT] [ , ] [AKTUALIZACE] }
Specifikuje příkazy pro úpravu dat; při pokusu proti této tabulce nebo zobrazení aktivujte DML trigger. Musí být zadána alespoň jedna možnost. Jakákoli kombinace těchto prvků v libovolném pořadí je povolena v definici spouštěče. Pokud je uvedeno více než jedna možnost, oddělte je čárkami.
U spouštěčů MÍSTO PŘED není volba DELETE povolena v tabulkách, které mají referenční vztah specifikující kaskádovou akci PŘI ODSTRANĚNÍ. Podobně volba UPDATE není povolena u tabulek, které mají referenční vztah specifikující kaskádovou akci PŘI AKTUALIZACI. Další informace viz ALTER TABLE (Transact-SQL).
event_type
Je název Transact-SQL jazykové události, která po spuštění způsobí spuštění DDL spouštěče. Platné události pro triggery DDL jsou uvedeny v událostech DDL.
event_group
Je název předdefinované skupiny Transact-SQL jazykových událostí. DDL trigger se spustí po vykonání jakékoli Transact-SQL jazykové události, která patří event_group. Platné skupiny událostí pro triggery DDL jsou uvedeny ve skupinách událostí DDL. Po dokončení spuštění ALTER TRIGGER event_group také funguje jako makro tím, že přidává typy událostí, které pokrývá, do zobrazení sys.trigger_events katalogu.
NE PRO REPLIKACI
platí pro: SQL Server 2008 (10.0.x) a novější.
Označuje, že spouštěč by neměl být vykonán, když replikační agent upraví tabulku zapojenou do spouštěče.
sql_statement
Jsou spouštěcí podmínky a činy.
Pro triggery na tabulkách optimalizovaných pro paměť je jedinou sql_statement povolenou na nejvyšší úrovni blok ATOMIC. T-SQL povolený uvnitř ATOMIC bloku je omezen T-SQL povoleným v nativních procs.
EXTERNÍ NÁZEV <method_specifier>
platí pro: SQL Server 2008 (10.0.x) a novější.
Specifikuje způsob, jakým se sestava váže na spoušť. Metoda nesmí obsahovat žádné argumenty a vrátit void. class_name musí být platný identifikátor SQL Serveru a musí existovat jako třída v sestavení s viditelností sestavení. Třída nemůže být vnořenou třídou.
Poznámky
Pro více informací o ALTER TRIGGER viz Poznámky v CREATE TRIGGER (Transact-SQL).
Poznámka:
Možnosti EXTERNAL_NAME a ON_ALL_SERVER nejsou dostupné v uzavřené databázi.
DML Triggery
ALTER TRIGGER podporuje ručně aktualizovatelné pohledy prostřednictvím spouštěčů INSTEAD OF na tabulkách a pohledech. SQL Server aplikuje ALTER TRIGGER stejným způsobem pro všechny typy spouštěčů (AFTER, INSTEAD-OF).
První a poslední spouštěče PO, které se provedou na tabulce, lze zadat pomocí sp_settriggerorder. V tabulce lze zadat pouze jeden spouštěč první a jeden poslední PO. Pokud jsou na stejné tabulce další spouštěče PO, jsou vykonávány náhodně.
Pokud příkaz ALTER TRIGGER změní první nebo poslední spouštěč, první nebo poslední atributová sada na upraveném triggeru je vypuštěna a hodnota pořadí musí být resetována pomocí sp_settriggerorder.
Spouštěč AFTER se spustí až poté, co byl spouštěcí SQL příkaz úspěšně vykonán. Toto úspěšné spuštění zahrnuje všechny referenční kaskádové akce a kontroly omezení přidružené k objektu aktualizované nebo odstraněné. Operace AFTER kontroluje účinky spouštěcího příkazu a také všechny referenční kaskádové akce UPDATE a DELETE způsobené tímto příkazem.
Když je akce DELETE na podřízenou nebo referenční tabuli výsledkem CASCADE na DELETE z nadřazené tabulky a na této podřízené tabulce je definován spouštěč INSTEAD OF na DELETE, spouštěč je ignorován a akce DELETE se vykoná.
DDL spouště
Na rozdíl od DML spouštěčů nejsou DDL spouštěče zaměřeny na schémata. Proto nelze použít OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY a OBJECTPROPERTY(EX) při dotazování metadat o DDL spouštěčích. Místo toho použijte zobrazení katalogu. Další informace naleznete v tématu Získání informací o triggerech DDL.
Spouštěče při přihlášení
Azure SQL Database nepodporuje spouštěče při přihlašovacích událostech.
Povolení
Pro změnu DML spouštěče je potřeba ALTER povolení k tabulce nebo zobrazení, kde je spouštěč definován.
Pro změnu DDL triggeru definovaného s rozsahem serveru (NA VŠECH SERVERECH) nebo přihlašovacím triggerem je potřeba oprávnění CONTROL SERVER na serveru. Pro změnu DDL triggeru definovaného s databázovým rozsahem (ON DATABASE) je potřeba ZMĚNIT LIBOVOLNÉ POVOLENÍ DATABASE DDL TRIGGER v aktuální databázi.
Examples
Následující příklad vytváří DML trigger v databázi AdventureWorks2025 , který vytiskne uživatelem definovanou zprávu klientovi, když se uživatel pokusí přidat nebo změnit data v tabulce SalesPersonQuotaHistory . Spouštěč se pak upraví tak, že ALTER TRIGGER se použije tak, že se spouštěč aplikuje pouze na INSERT aktivity. Tento trigger je užitečný, protože uživateli připomíná, aby při aktualizaci nebo vkládání řádků do této tabulky také informoval oddělení Compensation.
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
Viz také
ODSTRANIT TRIGGER (Transact-SQL)
Povolení triggeru (Transact-SQL)
ZAKÁZAT TRIGGER (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_helptrigger (Transact-SQL)
Vytvoření uložené procedury
sp_addmessage (Transact-SQL)
Transakce
Získejte informace o triggerech DML
Získání informací o triggerech DDL
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)
Změny schémat v databázích publikací