DROP TRIGGER (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Quita uno o varios desencadenadores DML o DDL de la base de datos actual.

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- 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:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

IF EXISTS
Se aplica a: SQL Server (desde SQL Server 2016 (13.x) hasta la versión actual, SQL Database).

Quita el desencadenador condicionalmente solo si ya existe.

schema_name
Es el nombre del esquema al que pertenece un desencadenador DML. Los desencadenadores DML tienen como ámbito el esquema de la tabla o la vista donde se crean. schema_name no se puede especificar para los desencadenadores DDL o de inicio de sesión.

trigger_name
Es el nombre del desencadenador que se va a quitar. Para ver una lista de los desencadenadores creados actualmente, utilice sys.server_assembly_modules o sys.server_triggers.

DATABASE
Indica que el ámbito del desencadenador DDL se aplica a la base de datos actual. Debe especificarse DATABASE si también se especificó al crear o modificar el desencadenador.

ALL SERVER
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.

Indica que el ámbito del desencadenador DDL se aplica al servidor actual. Debe especificarse ALL SERVER si también se especificó al crear o modificar el desencadenador. ALL SERVER también se aplica a los desencadenadores de inicio de sesión.

Nota:

Esta opción no está disponible en las bases de datos independientes.

Observaciones

Puede eliminar un desencadenador DML si quita éste o quita la tabla del desencadenador. Cuando se quita una tabla, también se quitan todos los desencadenadores asociados.

Cuando se quita un desencadenador, se quita la información acerca del desencadenador de las vistas de catálogos sys.objects, sys.triggers y sys.sql_modules.

Se pueden quitar varios desencadenadores DDL por instrucción DROP TRIGGER solo si todos los desencadenadores se crearon utilizando las mismas cláusulas ON.

Para cambiar el nombre de un desencadenador, utilice DROP TRIGGER y CREATE TRIGGER. Para cambiar la definición de un desencadenador, utilice ALTER TRIGGER.

Para obtener más información sobre cómo determinar las dependencias de un desencadenador específico, consulte sys.sql_expression_dependencies, sys.dm_sql_referenced_entities (Transact-SQL) y sys.dm_sql_referencing_entities (Transact-SQL).

Para obtener más información sobre cómo ver el texto del desencadenador, consulte sp_helptext (Transact-SQL) y sys.sql_modules (Transact-SQL).

Para obtener más información sobre cómo ver una lista de desencadenadores existentes, consulte sys.triggers (Transact-SQL) y sys.server_triggers (Transact-SQL).

Permisos

Para quitar un desencadenador DML se requiere el permiso ALTER en la tabla o vista en la que está definido el desencadenador.

Para anular un desencadenador DDL definido con ámbito de servidor (ON ALL SERVER) o un desencadenador logon se requiere el permiso CONTROL SERVER en el servidor. Para quitar un desencadenador DDL definido con el ámbito de base de datos (ON DATABASE) se requiere el permiso ALTER ANY DATABASE DDL TRIGGER en la base de datos actual.

Ejemplos

A. Quitar un desencadenador DML

En el siguiente ejemplo se quita el desencadenador employee_insupd de la base de datos AdventureWorks2022. (A partir de SQL Server 2016 (13.x) se puede usar la sintaxis DROP TRIGGER IF EXISTS).

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

B. Quitar un desencadenador DDL

En el siguiente ejemplo se quita el desencadenador DDL safety.

Importante

Puesto que los desencadenadores DDL no están en el ámbito del esquema y, por tanto, no aparecen en la vista de catálogo sys.objects, la función OBJECT_ID no se puede utilizar para consultar si existen en la base de datos. Los objetos que no están en el ámbito del esquema deben consultarse utilizando la vista de catálogo apropiada. Para los desencadenadores DDL, use sys.triggers.

DROP TRIGGER safety  
ON DATABASE;  

Consulte también

ALTER TRIGGER (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
ENABLE TRIGGER (Transact-SQL)
DISABLE TRIGGER (Transact-SQL)
EVENTDATA (Transact-SQL)
Obtener información acerca de los desencadenadores 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)