DISABLE TRIGGER (Transact-SQL)

Deshabilita un desencadenador.

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

Sintaxis

DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

Argumentos

  • schema_name
    Es el nombre del esquema al que pertenece el desencadenador. schema_name no se puede especificar para desencadenadores DDL o logon.

  • trigger_name
    Es el nombre del desencadenador que se va a deshabilitar.

  • ALL
    Indica que todos los desencadenadores definidos en el ámbito de la cláusula ON están deshabilitados.

    Nota de advertenciaAdvertencia

    SQL Server crea desencadenadores en las bases de datos que se publican para la replicación de mezcla. Si se especifica ALL en las bases de datos publicadas, se deshabilitarán los desencadenadores y se interrumpirá la replicación. Compruebe que las base de datos actual no se publica para replicación de mezcla antes de especificar ALL.

  • object_name
    Es el nombre de la tabla o vista en la que se creó el desencadenador DML trigger_name para su ejecución.

  • DATABASE
    En el caso de un desencadenador DDL, indica que trigger_name se creó o se modificó para ejecutarse en el ámbito de la base de datos.

  • ALL SERVER
    En el caso de un desencadenador DDL, indica que trigger_name se creó o se modificó para ejecutarse en el ámbito del servidor. ALL SERVER también se aplica a los desencadenadores de inicio de sesión.

Comentarios

De forma predeterminada, los desencadenadores se habilitan cuando se crean. Al deshabilitar un desencadenador no se quita. Sigue siendo un objeto de la base de datos actual. Sin embargo, el desencadenador no se activa cuando se ejecuta una instrucción Transact-SQL en la que se programó. Los desencadenadores se pueden volver a habilitar con ENABLE TRIGGER. Los desencadenadores DML definidos en tablas también se pueden habilitar o deshabilitar mediante el uso de ALTER TABLE.

Permisos

Para deshabilitar un desencadenador DML, el usuario debe contar, como mínimo, con permiso ALTER sobre la tabla o vista en la que se creó el desencadenador.

Para deshabilitar un desencadenador DDL con ámbito de servidor (ON ALL SERVER) o un desencadenador de inicio de sesión, el usuario debe tener el permiso CONTROL SERVER en el servidor. Para deshabilitar un desencadenador DDL con ámbito en la base de datos (ON DATABASE) el usuario debe contar, como mínimo, con un permiso ALTER ANY DATABASE DDL TRIGGER en la base de datos actual.

Ejemplos

A. Deshabilitar un desencadenador DML en una tabla

En el ejemplo siguiente se deshabilita el desencadenador uAddress, que se creó en la tabla Address.

USE AdventureWorks2008R2;
GO
DISABLE TRIGGER Person.uAddress ON Person.Address;
GO

B. Deshabilitar un desencadenador DDL

En el ejemplo siguiente se crea un desencadenador DDL safety, con ámbito en la base de datos, y después se deshabilita.

IF EXISTS (SELECT * FROM sys.triggers
    WHERE parent_class = 0 AND name = 'safety')
DROP TRIGGER safety ON DATABASE;
GO
CREATE TRIGGER safety 
ON DATABASE 
FOR DROP_TABLE, ALTER_TABLE 
AS 
   PRINT 'You must disable Trigger "safety" to drop or alter tables!' 
   ROLLBACK;
GO
DISABLE TRIGGER safety ON DATABASE;
GO

C. Deshabilitar todos los desencadenadores que se definieron con el mismo ámbito

En el ejemplo siguiente se deshabilitan todos los desencadenadores DDL creados en el ámbito de servidor.

USE AdventureWorks2008R2;
GO
DISABLE Trigger ALL ON ALL SERVER;
GO