Triggers – Activar y Desactivar

 

Triggers – Activar y Desactivar

Este artículo muestra como activar o desactivar un Trigger, 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

1. 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

Note que el registro con código 4 es Southern.

Actualizar Region

update Region set RegionDescription = ‘Sur’ where RegionID = 4
go

2. 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 una región
insert into Region values (25,’Ica’)
go

Insertar una región con la misma descripción de una existente (Piura)
insert into Region values (255,’Piura’)
go

3. 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 (suponer que el registro con código 56 existe, de lo contrario insertar uno con el código 56)
delete Region where RegionID = 56
go

Eliminar varios registros, se requiere insertar varios. Por ejemplo una vez insertados los registros con códigos 34, 87 y 25

delete Region where RegionID in (34,87,25)
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,25
Desactivar el Trigger trRegionBorrarUnRegistro, borrar los registros y activar el Trigger

Disable Trigger trRegionBorrarUnRegistro on Region
go
delete Region where RegionID in (34,87,25)
go
Enable Trigger trRegionBorrarUnRegistro on Region
go

Ver los registros
select * from Region
go