DROP TRIGGER (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure

Rimuove uno o più trigger DML o DDL dal database corrente.

Convenzioni di sintassi Transact-SQL

Sintassi

-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)  
  
DROP TRIGGER [ IF EXISTS ] [schema_name.]trigger_name [ ,...n ] [ ; ]  
  
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger)  
  
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]   
ON { DATABASE | ALL SERVER }   
[ ; ]  
  
-- Trigger on a LOGON event (Logon Trigger)  
  
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]   
ON ALL SERVER  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

IF EXISTS
Si applica a: SQL Server (da SQL Server 2016 (13.x) fino alla versione corrente, database SQL).

Rimuove in modo condizionale il trigger solo se esiste già.

schema_name
Nome dello schema a cui appartiene un trigger DML. L'ambito dei trigger DML è definito nello schema della tabella o della vista in cui sono i trigger stessi creati. schema_name non può essere specificato per i trigger DDL o LOGON.

trigger_name
Nome del trigger da rimuovere. Per vedere un elenco dei trigger attualmente creati, usare sys.server_assembly_modules o sys.server_triggers.

DATABASE
Indica che l'ambito del trigger DDL corrisponde al database corrente. È necessario specificare DATABASE se tale argomento è stato specificato anche al momento della creazione o della modifica del trigger.

ALL SERVER
Si applica a: SQL Server 2008 (10.0.x) e versioni successive.

Indica che l'ambito del trigger DDL corrisponde al server corrente. È necessario specificare ALL SERVER se tale valore è stato specificato anche al momento della creazione o della modifica del trigger. ALL SERVER si applica anche ai trigger LOGON.

Nota

Questa opzione non è disponibile in un database indipendente.

Osservazioni:

È possibile rimuovere un trigger DML eliminando il trigger stesso o la tabella di trigger corrispondente. Quando si elimina una tabella, vengono eliminati anche tutti i trigger associati.

Se si elimina un trigger, le informazioni relative al trigger vengono rimosse dalle viste del catalogo sys.objects, sys.triggers e sys.sql_modules.

È possibile eliminare più trigger DDL con una singola istruzione DROP TRIGGER solo se tutti i trigger sono stati creati con clausole ON identiche.

Per rinominare un trigger, utilizzare le istruzioni DROP TRIGGER e CREATE TRIGGER. Per modificare la definizione di un trigger, utilizzare ALTER TRIGGER.

Per altre informazioni su come determinare le dipendenze per un trigger specifico, vedere sys.sql_expression_dependencies, sys.dm_sql_referenced_entities (Transact-SQL) e sys.dm_sql_referencing_entities (Transact-SQL).

Per altre informazioni su come visualizzare il testo del trigger, vedere sp_helptext (Transact-SQL) e sys.sql_modules (Transact-SQL).

Per altre informazioni su come visualizzare un elenco dei trigger esistenti, vedere sys.triggers (Transact-SQL) e sys.server_triggers (Transact-SQL).

Autorizzazioni

Per l'eliminazione di un trigger DML è richiesta l'autorizzazione ALTER per la tabella o la vista in cui è definito il trigger.

Per eliminare un trigger DDL definito con ambito server (ON ALL SERVER) o un trigger LOGON è necessaria l'autorizzazione CONTROL SERVER nel server. Per l'eliminazione di un trigger DDL con ambito database (ON DATABASE) è richiesta l'autorizzazione ALTER ANY DATABASE DDL TRIGGER nel database corrente.

Esempi

R. Eliminazione di un trigger DML

Nell'esempio seguente viene eliminato il employee_insupd trigger nel database AdventureWorks2022. A partire da SQL Server 2016 (13.x) è possibile usare la sintassi DROP TRIGGER IF EXISTS.

IF OBJECT_ID ('employee_insupd', 'TR') IS NOT NULL  
   DROP TRIGGER employee_insupd;  

B. Eliminazione di un trigger DDL

Nell'esempio seguente viene eliminato il trigger DDL safety.

Importante

Poiché i trigger DDL non hanno ambito schema e pertanto non sono inclusi nella vista del catalogo sys.objects, non è possibile usare la funzione OBJECT_ID per eseguire una query e scoprire se esistono nel database. Per gli oggetti che non hanno ambito schema è necessario eseguire query nella vista del catalogo appropriata. Per i trigger DDL usare sys.triggers.

DROP TRIGGER safety  
ON DATABASE;  

Vedi anche

ALTER TRIGGER (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
EVENTDATA (Transact-SQL)
Recuperare informazioni sui trigger DML
sp_help (Transact-SQL)
sp_helptrigger (Transact-SQL)
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)