Triggers Activar y desactivar

Triggers en SQL Server – Activar y Desactivar

Este artículo muestra como activar o desactivar un Trigger en SQL Server, los triggers DML son procedimientos que se disparan cuando en una tabla se realizan las instrucciones Insert, Update o Delete. Para mayor información Ver Triggers
Desactivar el Trigger
Disable Trigger NombreTrigger on Tabla/Vista
Activar el Trigger
Enable Trigger NombreTrigger on Tabla/Vista
Se puede eliminar un Trigger usando Drop Trigger NombreTrigger

Ejercicio

Usando la base de datos Northwind
use Northwind
go
Crear un trigger para que se dispare cuando se actualiza una Region
Create trigger trRegionActualiza on
Region for update
As
Begin
Print ‘Se actualizaron los datos’
End
go
Al actualizar los datos de una región se dispara el trigger, mostrando el
mensaje.
Primero mostramos los registros para actualizar uno de ellos, el registro
con código 4 se cambiará la descripción por Sur.

select * from Region
go
Actualizar Region
update Region set RegionDescription = ‘Sur’
where RegionID = 4
go

Crear un trigger para Region que no permita insertar o modificar una región con la descripción de una región existente.
Create trigger trRegionInsertaModificaSinDuplicado
on Region for Insert, Update
As
Begin — Inicio del Trigger
— Contar la cantidad de registros con la misma descripción
if (select Count(Region.RegionID) from inserted, Region
where inserted.RegionDescription = Region.RegionDescription)>1
Begin
Rollback transaction — Anula la inserción o actualización
Print ‘No se realizó la transacción’
End
Else
Begin
Print ‘Se realizó la inserción o modificación…’
End
End — Final del Trigger
go

Ver las regiones
select * from Region
go
Insertar regiones
insert into Region values (25,’Ica’)
insert into Region values (34,’Piura’)
insert into Region values (87,’La Libertad’)
insert into Region values (88,’Tumbes’)
go

Insertar una región con la misma descripción de una existente (Ica), obviamente con un código diferente. La operación no se realiza por el Triggers creado trRegionInsertaModificaSinDuplicado
insert into Region values (255,’Ica’)
go

Crear un trigger en Region que no permita borrar mas de un registro
Create trigger trRegionBorrarUnRegistro on Region for Delete
As
Begin
If (Select Count(*) from deleted) > 1
Begin
Rollback transaction
Print ‘No se puede borrar mas de un registro…’
End
End
go

Ver los registros de Region
select * from Region
go

Eliminar un registro de Region
delete Region where RegionID = 25
go

Eliminar varios registros
delete Region where RegionID in (34,87,88)
go
/* Mensaje
No se puede borrar mas de un registro…
Mens. 3609, Nivel 16, Estado 1, Línea 80
La transacción terminó en el desencadenador. Se anuló el lote.
*/
Si se debe eliminar los registros, hay que desactivar o eliminar el Trigger

Desactivar el Trigger
Disable Trigger NombreTrigger on Tabla/Vista

Activar el Trigger
Enable Trigger NombreTrigger on Tabla/Vista

Para borrar las regiones con códigos 34,87,88
Desactivar el Trigger trRegionBorrarUnRegistro, borrar los registros y activar el Trigger
Disable Trigger trRegionBorrarUnRegistro on Region
go
delete Region where RegionID in (34,87,88)
go
Enable Trigger trRegionBorrarUnRegistro on Region
go
— Ver los registros
select * from Region
go