DROP TRIGGER (Transact-SQL)

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

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
DROP TRIGGER [schema_name.]trigger_name [ ,...n ] [ ; ]

Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger)
DROP TRIGGER trigger_name [ ,...n ] 
ON { DATABASE | ALL SERVER } 
[ ; ]

Trigger on a LOGON event (Logon Trigger)
DROP TRIGGER trigger_name [ ,...n ] 
ON ALL SERVER 

Argumentos

  • schema_name
    Es el nombre del esquema al que pertenece el desencadenador DML. Los desencadenadores DML se limitan al esquema de la tabla o vista en la que se crearon. No se puede especificar schema_name para desencadenadores DDL o logon.

  • 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
    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. También se aplica ALL SERVER a los desencadenadores logon.

Comentarios

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 sólo 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 acerca de cómo determinar las dependencias de un desencadenador específico, vea 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 acerca de cómo ver el texto del desencadenador, vea sp_helptext (Transact-SQL) y sys.sql_modules (Transact-SQL).

Para obtener más información acerca de cómo ver una lista de los desencadenadores existentes, vea 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.

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

B. Quitar un desencadenador DDL

En el siguiente ejemplo se quita el desencadenador DDL safety.

Nota importanteImportante

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.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety
ON DATABASE;
GO