Listado completo de tutoriales
149 - Disparador (modificar) |
Los triggers pueden modificarse y eliminarse.
Al modificar la definición de un disparador se reemplaza la definición existente del disparador por la nueva definición.
La sintaxis general es la siguiente:
alter trigger NOMBREDISPARADOR NUEVADEFINICION;
Asumiendo que hemos creado un disparador llamado "dis_empleados_borrar" que no permitía eliminar más de 1 registro de la tabla empleados; alteramos el disparador, para que cambia la cantidad de eliminaciones permitidas de 1 a 3:
alter trigger dis_empleados_borrar on empleados for delete as if (select count(*) from deleted)>3--antes era 1 begin raiserror('No puede borrar mas de 3 empleados',16, 1) rollback transaction end;
Se puede cambiar el evento del disparador. Por ejemplo, si creó un disparador para "insert" y luego se modifica el evento por "update", el disparador se ejecutará cada vez que se actualice la tabla.
Ingresemos el siguiente lote de comandos en el SQL Server Management Studio:
if object_id('empleados') is not null drop table empleados; create table empleados( documento char(8) not null, nombre varchar(30) not null, domicilio varchar(30), constraint PK_empleados primary key(documento), ); go insert into empleados values('22000000','Ana Acosta','Avellaneda 56'); insert into empleados values('23000000','Bernardo Bustos','Bulnes 188'); insert into empleados values('24000000','Carlos Caseres','Caseros 364'); insert into empleados values('25555555','Diana Duarte','Colon 1234'); insert into empleados values('26666666','Diana Duarte','Colon 897'); insert into empleados values('27777777','Matilda Morales','Colon 542'); go -- Creamos un disparador para que no permita eliminar más de un registro a -- la vez de la tabla empleados: create trigger dis_empleados_borrar on empleados for delete as if (select count(*) from deleted)>1 begin raiserror('No puede eliminar más de un 1 empleado', 16, 1) rollback transaction end; go -- Eliminamos 1 empleado (El trigger se dispara y realiza la eliminación): delete from empleados where documento ='22000000'; -- Intentamos eliminar varios empleados -- (El trigger se dispara, muestra un mensaje y deshace la transacción.): delete from empleados where documento like '2%'; select * from empleados; go -- Alteramos el disparador, para que cambia la cantidad de eliminaciones -- permitidas de 1 a 3: alter trigger dis_empleados_borrar on empleados for delete as if (select count(*) from deleted)>3--antes era 1 begin raiserror('No puede borrar más de 3 empleados',16, 1) rollback transaction end; go -- Intentamos eliminar 5 empleados (El trigger se dispara, -- muestra el nuevo mensaje y deshace la transacción.): delete from empleados where documento like '2%'; -- Eliminamos 3 empleados (El trigger se dispara y -- realiza las eliminaciones solicitadas): delete from empleados where domicilio like 'Colon%'; select * from empleados;